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(…)中包装事件处理程序? 只是一个想法。
尝试返回false
。 live
不会像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()阻止重定向。