Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在动态添加的元素上,jQuery.on将不起作用_Javascript_Jquery - Fatal编程技术网

Javascript 在动态添加的元素上,jQuery.on将不起作用

Javascript 在动态添加的元素上,jQuery.on将不起作用,javascript,jquery,Javascript,Jquery,我正在测试一些功能,我正在尝试这样做,一旦我停留在一个特定的元素上(在本例中是任何链接),它将在控制台内输出一些东西 $( "a" ).on({ click: function() { console.log('clicked'); }, mouseenter: function() { console.log('enter'); }, mouseleave: function() { console.log('left'); } }); 我已经看过这个答

我正在测试一些功能,我正在尝试这样做,一旦我停留在一个特定的元素上(在本例中是任何链接),它将在控制台内输出一些东西

$( "a" ).on({
  click: function() {
    console.log('clicked');
  }, mouseenter: function() {
   console.log('enter');
  }, mouseleave: function() {
    console.log('left');
  }
});
我已经看过这个答案->其中说“您可以定义一次您的函数,它将为任何动态添加的元素执行”

所以我有这个js脚本,但是一旦元素被动态加载,比如youtube视频,但是一旦我停留在新添加的元素上,这个脚本将无法工作,控制台内没有输出

$( "a" ).on({
  click: function() {
    console.log('clicked');
  }, mouseenter: function() {
   console.log('enter');
  }, mouseleave: function() {
    console.log('left');
  }
});

我在这里遗漏了什么吗?

您绑定元素的方式用于将多个事件处理程序绑定到相同的元素。如果它们是动态添加的,那么您将不得不求助于事件委派。将事件绑定到绑定事件时存在的父元素

$( "body" ).on('click', 'a', function() {
    console.log('clicked');
});

$( "body" ).on('mouseenter', 'a', function() {
    console.log('enter');
});

$( "body" ).on('mouseleave', 'a', function() {
    console.log('left');
});

您可以将
正文
替换为事件绑定时出现的
a
的任何其他最接近的父级。

“我在这里遗漏了什么吗?”是的。
$('body')。on({…events…},'a')
是将多个侦听器绑定到同一委托的方法。嗯……我刚刚使用了,但是我必须用错误的方法。。你的例子和我想说的一模一样,谢谢!唯一的问题是元素由于某种原因被多次触发…@AlwaysConflused请确保您没有将事件绑定到同一个元素多次times@Sushanth--我使用您的示例对其进行了测试,如果网站页面加载了ajax,当我在元素上悬停一次时,它会以某种方式在控制台中输出3或4个值。。