2010-07-29 97 views
24

我很难让e.preventDefault();正常工作。e.preventdefault();无法正常工作

这里是我的代码

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

有人能解释我做错了,我可以看到加载功能工作,但随后的页面重定向到被点击链接,我需要防止。

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

+0

我有一种感觉,这里有其他事情发生,因为'preventDefault' *应该*工作。我们可以看到标记/其他代码吗? – James 2010-07-29 12:42:49

+0

就像J-P所说的那样,看起来还有其他事情正在发生,它应该按预期工作。你能提供#ListSnapshot的HTML和它的孩子吗? – GenericTypeTea 2010-07-29 12:46:32

+0

我从您的问题中删除了答案,您应该在问题再次打开时将其作为答案发布。 – 2013-12-11 15:06:24

回答

2

尝试返回falselive不会总是以与bind相同的方式工作。检查jquery docs

+2

谢谢,我很害怕我尝试过,但仍然没有运气。 再次感谢 Gary – Gary 2010-07-29 18:21:08

+0

我正在使用.on()并返回false为我工作! – servermanfail 2014-07-21 11:28:23

6

您提供的代码应该一定可行(working example)。你的代码有另一个问题。

尝试在您的活动处理程序中放置提醒,以确保它在所有都会触发。您的#ListSnapshot a可能找不到任何东西。

如果处理程序中出现其他错误,则会导致异常,这可能会阻止JavaScript一直执行到preventDefault调用。我没有看到你提供的代码中可能存在什么,tho。

+2

我认为这可能是答案。 'try..catch'应该有所帮助。 – Josh 2010-07-29 13:19:30

+1

我编辑了这个问题,因为我不确定如何添加回复,并且无法将它全部放在此框中。 谢谢 再次 – Gary 2010-07-29 18:19:44

+0

@加里:你做了最好的事情 - 编辑你的问题的细节,然后评论让别人知道审查你编辑的问题是处理这个问题的适当方式。话虽如此,鉴于警报显示,我不确定问题是什么。这不是一个例外,因为我怀疑:-( – Josh 2010-07-30 20:19:27

3

我认为@David Hedlund的回答是正确的,必须发生异常。当我编写事件处理程序时,我使用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();仍然会被调用。

8

我想你可能有以下之情况......至少,这将重现错误

你可能有一个事件上涨是建立在悬停事件,该事件可能是使用绑定,并即使您调用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(); 


}); 
+1

这可能会发生删除链接的Rails,因为Rails会添加你可能不知道的事件 – lulalala 2013-01-28 06:13:01

3

您是否尝试过在包装$(文件)。就绪(...)第一事件处理程序?只是一个想法。

2

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

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

是的,它已经修复了我在测试iPhone 6S Plus。谢谢! – mattauckland 2015-12-10 02:29:43

0

老问题,但这只是那种时刻应该看到什么萤火虫日志在控制台或返回作为错误。代码中的某些东西显然会阻止preventDefault()防止重定向。

22

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

+0

谢谢你,你的解决方案就像一个魅力。再次感谢:) – Vidhi 2014-09-24 07:45:45