event.preventDefault();不使用jQuery中的.on
从jQuery 1.7开始,event.preventDefault();不使用jQuery中的.on,jquery,Jquery,从jQuery 1.7开始,.live已被弃用,并被上的.on替换。但是,我很难让jQuery.on处理事件.preventDefault()。在下面的示例中,单击锚定标记会将我带到链接页面,而不是阻止跟随链接的默认浏览器操作 jQuery('.link-container a').on('click', function(event) { event.preventDefault(); //do something }); 但是,与.live相同的代码工作时不会出现任何问题 jQue
.live
已被弃用,并被上的.on替换。但是,我很难让jQuery.on
处理事件.preventDefault()代码>。在下面的示例中,单击锚定标记会将我带到链接页面,而不是阻止跟随链接的默认浏览器操作
jQuery('.link-container a').on('click', function(event) {
event.preventDefault();
//do something
});
但是,与.live
相同的代码工作时不会出现任何问题
jQuery('.link-container a').live('click', function(event) {
event.preventDefault();
//do something
});
我目前使用的是Wordpress 3.3.1附带的jQuery版本1.7.1。我这里怎么了?您没有正确绑定它。.on()
-方法在做您想做的事情时就像.delegate()
一样工作。以下是正确使用的示例:
$('.link-container').on('click', 'a', function(event){
event.preventDefault();
})
这是假设.link容器在页面加载时存在,并且不是动态加载的。您需要将委托方法绑定到最接近的静态祖先,在第二个参数中,在本例中为'a'
,指定委托方法应用于哪些项
仅使用$('selector')。在('click',function(){})
上,与使用$('selector')的结果完全相同。单击(function(){})
下面是一个关于JSFIDLE的示例:如果动态添加a
元素,则需要将on()
与过滤器一起使用(以前是delegate()
),如下所示:
jQuery('.link-container').on('click', 'a', function(event) {
event.preventDefault();
//do something
});
这就假定.link container
不是动态的,在页面加载时可供DOM使用。请尝试以下方法:-
var $j = jQuery.noConflict();
$j(function(){
j('.link-container').on('click', 'a', function(event) {
event.preventDefault();
});
});
请给我一个明确的解释。你的例子很有效。但是,页面加载期间唯一可用的父容器至少高于3级,并且此嵌套结构中还有其他锚定标记。您的示例开始影响其他锚定标记,我不打算这样做。应该做些什么来避免相同的情况?通过为锚定标记指定一个单独的类来实现这一点。这是一个解决方案,另一个解决方案是在第二个参数中继续使用选择器,即不使用$(“#容器”)。在('click','a')
上,可以使用更具体的选择器,如$(“#容器”)。在上('click','.someContainer.linkcontainer a')
。但是使用一个类非常有效:)Thx获取信息。在其他情况下会有帮助。