e.preventdefault(); 不工作

我在收到e.preventDefault();遇到了麻烦e.preventDefault(); 上class。

这是我的代码

 $('#ListSnapshot a').live('click', function(e){ var url = $(this).attr('href') +' #WebPartWPQ2 .ms-listviewtable'; $('#ListSnapshot').load(url); e.preventDefault(); }); 

有人可以解释我做错了什么,我可以看到加载function工作,但然后页面重定向到我需要阻止的点击链接。

我也尝试过移动e.preventDefault(); 到function的顶部,无济于事。

我有一个类似的问题,其中e.preventDefault()可以在某些情况下工作,但在其他情况下不工作。 它没有显示任何错误,并且使用try-catch未显示catch alert 。 添加e.stopImmediatePropagation() ,万一它可以帮助任何人(非常感谢wcpro)

我想你可能有以下场景…至少,这将重现错误

你可能有一个事件更高的事件设置为hover事件,该事件可能正在使用绑定,即使你调用e.preventdefault它仍然会先调用绑定,所以你可能需要让一个更高的使用直播而不是绑定。 然后它应该按预期工作。 检查这个样本。

http://jsfiddle.net/rodmjay/mnkq3/

 $('div').bind ('click', function(){ // <-- switch this to live and you will see different behavior alert('div click'); }); $('a').live('click', function(e){ alert('a click'); e.stopImmediatePropagation(); }); 

您提供的代码肯定应该正常工作( 工作示例 )。 你的代码还有另一个问题。

尝试在事件处理程序中放置一个警报,以确保它完全触发。 您的#ListSnapshot a可能找不到任何内容。

如果处理程序中出现其他错误,则会导致exception,这可能会阻止javascript一直执行到preventDefault调用。 我不知道你提供的代码中可能有什么。

我认为@David Hedlund的回答是正确的,必须发生exception。 当我编写事件处理程序时,我使用try...catch块来确保不会发生默认操作。 试试这个:

 $('#ListSnapshot a').live('click', function(e){ try { var url = $(this).attr('href') +' #WebPartWPQ2 .ms-listviewtable'; $('#ListSnapshot').load(url); } catch(ex) { alert('An error occurred and I need to write some code to handle this!'); } e.preventDefault(); }); 

那样,因为e.preventDefault();try块之外,即使发生错误, e.preventDefault(); 仍将被召唤。

您是否尝试首先在$(document).ready(…)中包装事件处理程序? 只是一个想法。

尝试返回falselive不会像bind工作。 检查jquery 文档 。

e.preventDefault()应该在处理程序中的其他代码行之前执行。

 $('#ListSnapshot a').live('click', function(e){ e.preventDefault(); var url = $(this).attr('href') +' #WebPartWPQ2 .ms-listviewtable'; $('#ListSnapshot').load(url); }); 

老问题,但这只是那种时刻应该看到什么firebug登录控制台或返回错误。 代码中的某些内容显然会阻止preventDefault()阻止重定向。