jQuery event.preventDefault() 不工作除非调试

jQuery event.preventDefault() don't work unless debugging

我正在尝试使用 this 方法将 GET 参数转换为 POST。我还希望即使单击鼠标中键也能正确处理锚点。

这就是我绑定事件处理程序的方式:

$(document).ready(function () {
    $(".post").each(function(){
        $(this).mousedown(function(evt){
            switch(evt.which){
                case 1:
                case 2:
                    evt.stopPropagation();
                    evt.preventDefault();
                    get2post(evt);
                    break;
            }
        });
    });
});

当我点击 .post 锚点时,浏览器发送 POST 请求,然后立即中止它,转而发送本应阻止的 GET 请求。

(请不要介意处理GET请求时发生的错误。发生这种情况正是因为参数应该通过POST发送,而不是GET)

最后,当我调试 get2post 函数时,它按预期工作。我不知道为什么 evt.preventDefault() 行只在调试时才有效。

我在 Firefox 和 Chrome 上试过,得到了相同的结果。这里发生了什么?为什么 evt.preventDefault() 不工作除非调试?

anchorbuttoninputmousedown 事件上没有默认行为。您想要阻止 click 事件的默认行为。

$(function () {
    $('.post').on('click', function (evt) {
        switch (evt.which) {
            case 1:
            case 2:
                evt.stopPropagation();
                evt.preventDefault();
                get2post(evt);
                break;
        }
    });
});