javascript - $().html() 后无法输入空白表单文本区域;
问题描述
我正在写一个类似 SO 评论的脚注,
模板:
<div class="col-md-12 add-article-footnote">
<a href="{% url 'article:footnote_create'%}">add a footnote</a>
</div>
脚本:
单击“添加脚注”时,会提示脚注形式,
$(document).ready(function () {
$('.add-article-footnote').on('click', function (e) {
e.preventDefault();
var $addArticleFootnote = $(".add-article-footnote");
var footnoteForm = `
<br class="cbt">
<form action="" class="footnote-form">
<div class="form-group row">
<div class="col-md-9">
<textarea class="form-control" name="footnote" rows="3"></textarea>
</div>
<div class="col-md-2">
<button class="btn btn-primary" id="footnoteBtn">Add Annotation</button>
</div>
</div>
</form>`;
$addArticleFootnote.html(footnoteForm);
});//click event
})
但是,当表单出现时,我无法单击空白文本区域,但可以右键单击进入,
如果我立即单击,竖线会在行首闪烁。
解决方案
您将表单插入到.add-article-footnote
元素中。每次触发 jQuery 函数的相同元素。这意味着,即使您的表单在那里,jQuery 函数也会再次被触发,表单会重新初始化并且您无法单击它。
你可以这样做:
$(document).on('click', '.add-article-footnote', function(e) {
if (!$(this).hasClass('form-active')) {
e.preventDefault();
var $addArticleFootnote = $(".add-article-footnote");
$addArticleFootnote.addClass('form-active');
var footnoteForm = `
<br class="cbt">
<form action="" class="footnote-form">
<div class="form-group row">
<div class="col-md-9">
<textarea class="form-control" name="footnote" rows="3"></textarea>
</div>
<div class="col-md-2">
<button class="btn btn-primary" id="footnoteBtn">Add Annotation</button>
</div>
</div>
</form>`;
$addArticleFootnote.html(footnoteForm);
}
});
因此,当您将表单添加到页面时,您将类添加form-active
到add-article-footnote
元素,然后在函数执行之前检查它是否已经具有该类。如果为真,您将不再执行该功能。另一种可能性是add-article-footnote
在单击时删除元素并将表单插入其父元素。
推荐阅读
- ruby-on-rails - 在范围内使用关联域进行计算
- alphabet - ∑和∑1的区别
- spring - 混合参数策略 - 仅使用命名、位置或 JPA 序数策略之一
- c# - 在 c# 中获取属性的调用者信息
- javascript - 在 angular6 中刷新页面时,用户名将为空
- android-studio - Android Studio Web-view 访问存储的权限?
- python - 为什么图像块在提取时会像素化,但在连接时会变得正常?
- javascript - 我如何将所有这些代码存储在变量中
- python - 为 pip 设置私人仓库需要常规包的密码
- amazon-web-services - 尝试使用 Terraform 构建内部应用程序负载均衡器