Javascript 单击vs单击以获取传入元素 $(函数(){ $('div')。追加('div')

Javascript 单击vs单击以获取传入元素 $(函数(){ $('div')。追加('div'),javascript,jquery,Javascript,Jquery,在我的例子中,为什么会触发?我想我必须对传入元素使用像.on()这样的绑定 如果在DOM中存在元素之前附加事件侦听器,为什么 例如,如果要反转逻辑并在附加事件侦听器后直接附加元素,那么它根本不起作用: $(function(){ $('div').append('<a>link</a>'); $('a').click(function(){ alert('trigger <a>!'); }); }); //由于元素为 //在附加事件

在我的例子中,
为什么会触发?我想我必须对传入元素使用像
.on()
这样的绑定

如果在DOM中存在元素之前附加事件侦听器,为什么

例如,如果要反转逻辑并在附加事件侦听器后直接附加元素,那么它根本不起作用:

$(function(){
    $('div').append('<a>link</a>');

  $('a').click(function(){
    alert('trigger <a>!');
  });
});
//由于元素为
//在附加事件侦听器之后追加
$('a')。单击(函数(){
警报(‘触发器’);
});
$('div')。追加('link');
这就是为什么您需要将事件侦听器委托给DOM中当时确实存在的祖先元素:

// This wouldn't be fired since the element is 
// appended after the event listener is attached

$('a').click(function() {
  alert('trigger <a>!');
});

$('div').append('<a>link</a>');
$('div')。在('click','a',function()上{
警报(‘触发器’);
});
$('div')。追加('link');

ya确切地说,a是在单击侦听之前出现的,不是吗?脚本的顺序是原因…在添加
click
处理程序之前,您正在将
anchor
元素添加到dom中…如果将
append()
移动到
click
之后,它将不起作用-
$('div').on('click', 'a', function() {
  alert('trigger <a>!');
});

$('div').append('<a>link</a>');