jQuery on():奇怪的行为
此代码适用于我的网站:
$(function(){ $('.link-follow-stop').on('click', function(event){ console.log('|||'); return false; }); });
但这不是:
$(function(){ $(document).on('click', '.link-follow-stop', function(event){ console.log('|||'); return false; }); });
我在我的网站上运行第二个代码示例时没有看到任何错误,但是当我点击.link-follow-stop
链接时, console.log
调用不会触发。
我尝试在jsFiddle上运行第二个代码示例,它的运行方式与我预期的一样。 有什么不对?
与类’link-follow-stop’的链接是静态的(我的意思是不是动态的)。
如果在包含.link-follow-stop
的元素上有一个单击处理程序,并且它使用e.stopPropagation()
,这将阻止事件冒泡到document
。 .on()
的第二种forms取决于冒泡到该处理程序绑定的元素的事件; 然后它检查事件的实际目标是否与选择器匹配。
以下说明了这一点:
Click here $(function() { $(document).on("click", ".inner", function() { alert("inner"); }); $(".outer").click(function(e) { e.stopPropagation(); alert("outer"); }); });
小提琴
使用.on()
委托时, .on()
处理程序绑定到包含动态元素的最具体的静态元素。 这可以最大限度地降低另一个处理程序干扰和防止冒泡的风险。