JQuery: .on处理程序不附加到动态添加的元素
JQuery: .on handlers not attaching to dynamically added elements
我现在正在创建一个评论系统。当页面加载时,有一个用于创建新评论的框,以及一些带有回复按钮的评论。点击回复按钮时,复制并附加评论文本框,如下所示:
$(document).ready(function(){
$('.reply-button')
.one('click', function(){
var parent_id = $(this).parent('.comment').attr('id')
var parent_id_field = "<input value='" + parent_id + "' type='hidden' name='comment[parent_id]'' id='comment_parent_id'>"
$(this).replaceWith($('#master-comment-form').clone().attr('id', "reply-div-" + parent_id))
$('#' + "reply-div-" + parent_id).find('.field').append(parent_id_field)
});
填好框并提交表单后,我运行这个脚本,根据AJAX调用的响应追加注释。
jQuery(function () {
//target comment-form from comment form partial
$(".comment-form-div")
.on("ajax:beforeSend", function (evt, xhr, settings) {
console.log("Ajax request sent")
return $(this).find('text_area')
.addClass('uneditable-input')
.attr('disabled', 'disabled');
})
.on("ajax:success", function (evt, data, status, xhr) {
console.log("Ajax request successful")
$(this).find('text_area')
.removeClass('uneditable-input')
.removeAttr('disabled', 'disabled')
.val('');
return $(xhr.responseText).hide().insertAfter($(this)).show('slow');
});
});
问题是用于附加评论的JQuery只适用于原始回复框。新的回复框——从注释上的.clone生成的回复框——似乎没有附加处理程序,当表单仍然提交时,用于AJAX调用的JQuery .on从未运行。
这可能是一种适合使用委托事件处理的情况
$(document).on('ajax:beforeSend', '.comment-form-div', function (evt, data)
{
//do something
});
事件将被绑定到文档,但将检查它是否被应用到子选择器,.on
相关文章:
- 如何在Google柱状图中动态添加行/列
- 使用jQuery动态添加表并在其中动态添加行
- 如何使用Angular动态添加iframe-src
- 如何向JSON数组动态添加属性
- 动态添加通过json创建的选择项
- 使用jQuery根据动态生成的html动态添加html
- 使用.on动态添加jquery/js不知道的html元素
- JS动态添加字段-删除按钮不起作用
- 动态添加AngularJS脚本
- 将表行动态添加到表或tbody元素中
- jQuery-通过AJAX调用动态添加具有值的表单元格
- 将特定属性动态添加到元素中
- 在highcharts.js中向点弹出窗口动态添加文本
- 如何在Angular.js中循环动态添加Fields并获取数据并将其发送到服务器
- 使用jQuery动态添加onClick事件
- 如何在Opencart中动态添加JavaScript
- 剑道UI下载列表:如何动态添加新元素
- 动态添加复选框和输入框 jQuery
- 动态添加哈希标记;t工作
- 将图表动态添加到组合高图表中