e.preventdefault();不工作

时间:2010-07-29 12:35:54

标签: jquery sharepoint

我在让e.preventDefault();工作时遇到了麻烦。

这是我的代码

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

有人可以解释我做错了什么,我可以看到加载功能有效但页面会重定向到我需要阻止的点击链接。

我也尝试将e.preventDefault();移到功能的顶部,但无济于事。

8 个答案:

答案 0 :(得分:26)

我遇到了类似的问题,其中e.preventDefault()会对某些情况起作用,但对其他情况则不起作用。它没有显示错误,使用try-catch未显示catch alert。 添加e.stopImmediatePropagation()可以解决问题,万一它可以帮助任何人(非常感谢wcpro)

答案 1 :(得分:8)

我认为你可能有以下场景......至少,这会重现错误

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

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();


});

答案 2 :(得分:6)

您提供的代码肯定应该正常运行(working example)。你的代码还有另一个问题。

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

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

答案 3 :(得分: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();

答案 4 :(得分:3)

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

答案 5 :(得分:2)

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

答案 6 :(得分:2)

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

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

答案 7 :(得分:0)

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