Jquery 事件未在手动添加的元素上触发
Jquery event not triggering on manually added elments
页面进行 ajax 调用,接收 JSON,然后将 json 数据添加到新元素,并将这些元素附加到页面:
$('.get_comments').on "ajax:complete", (e, data, status) ->
json = data.responseJSON
for obj in json
$('.existing_div').append("<div class="APPENDED">#{obj.attr}</div>")
我有一些 'on' 监听器用于手动添加的元素,但它们没有触发!
$('.APPENDED').on "click", ->
console.log 'worked'
我明白这是因为 'ready' 看不到新添加的元素。 P.S。在 page:change、page:update 上也不起作用。
我该如何解决?
将事件处理程序直接附加到元素不适用于动态添加的元素。
您应该改为将处理程序附加到父容器。
试试这个:
$( "body" ).on( "click", ".APPENDED", function() {
console.log ('worked');
});
或者,
$(document).on("click", ".APPENDED", function() {
console.log ('worked');
});
在咖啡脚本中:
$(document).on "click", ".APPENDED", ->
console.log 'worked'
应该可以。
有两种方法可以解决这个问题。
1.更简单的方法
事件委托,你可以在这里阅读 http://learn.jquery.com/events/event-delegation/
$('.existing_div').on('click', '. APPENDED', function(){
// do something
});
2。在附加之前执行此操作
var elem = '<div class="APPENDED">#{obj.attr}</div>';
elem = $(elem);
elem.on('click', function(){
// do something
});
$('.existing_div').append(elem);
页面进行 ajax 调用,接收 JSON,然后将 json 数据添加到新元素,并将这些元素附加到页面:
$('.get_comments').on "ajax:complete", (e, data, status) ->
json = data.responseJSON
for obj in json
$('.existing_div').append("<div class="APPENDED">#{obj.attr}</div>")
我有一些 'on' 监听器用于手动添加的元素,但它们没有触发!
$('.APPENDED').on "click", ->
console.log 'worked'
我明白这是因为 'ready' 看不到新添加的元素。 P.S。在 page:change、page:update 上也不起作用。 我该如何解决?
将事件处理程序直接附加到元素不适用于动态添加的元素。 您应该改为将处理程序附加到父容器。
试试这个:
$( "body" ).on( "click", ".APPENDED", function() {
console.log ('worked');
});
或者,
$(document).on("click", ".APPENDED", function() {
console.log ('worked');
});
在咖啡脚本中:
$(document).on "click", ".APPENDED", ->
console.log 'worked'
应该可以。
有两种方法可以解决这个问题。 1.更简单的方法 事件委托,你可以在这里阅读 http://learn.jquery.com/events/event-delegation/
$('.existing_div').on('click', '. APPENDED', function(){
// do something
});
2。在附加之前执行此操作
var elem = '<div class="APPENDED">#{obj.attr}</div>';
elem = $(elem);
elem.on('click', function(){
// do something
});
$('.existing_div').append(elem);