jQuery preventDefault Not Behaving

时间:2012-11-09 16:54:38

标签: javascript jquery

我有一个行为不端的简单搜索功能。搜索框位于我们在搜索时不想提交的表单内,因此我在下面进行了设置。

$(function() {
    jQuery.fn.onEnter = function(callback) {
        this.keyup(function(e) {
            if(e.keyCode == 13) {
                e.preventDefault();
                //e.stopPropagation();
                if (typeof callback == 'function')
                    callback.apply(this);
            }
        });
        return this;
    }
    $('#txtSearch').onEnter(function() {
        search();
        return false;
    });
    $('#search_btn').click(function() {
        search();
        return false;
    });

    function search() {
        alert('searching');
    }
});

e.preventDefault()行不起作用,因此搜索功能会触发以及表单提交。我已经尝试了e.preventDefault()e.stopPropagation()但没有运气。

3 个答案:

答案 0 :(得分:3)

您正在停止浏览器默认keyup事件而不是submit事件。最好的办法是使用keydown,以便输入密钥本身停止。

同样使用e.which,它是针对crossbrowser标准化的。

您可以尝试添加keydown处理程序以防止输入密钥并在密钥内执行操作。

DEMO: http://jsfiddle.net/PSkvm/1/

jQuery.fn.onEnter = function(callback) {
    this.keyup(function(e) {
        if(e.keyCode == 13) {
            //e.stopPropagation();
            if (typeof callback == 'function')
                callback.apply(this);
        }
    }).keydown(function (e) {
         if(e.keyCode == 13) {
           e.preventDefault();
         }
    });
    return this;
}

答案 1 :(得分:0)

preventDefault()不适用于表单。尝试返回false;代替。

答案 2 :(得分:0)

很可能e.keyCode未被捕获

 var code = e.keyCode || e.which;

将您的代码修改为:

 var code = e.keyCode || e.which;
 if(code == 13) {
    e.preventDefault();
    if (typeof callback == 'function')
       callback.apply(this);
  }