3

我有一个行为不端的简单搜索功能。搜索框在我们不想在搜索时提交的表单内,所以我有下面的设置。

$(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()运气。

4

3 回答 3

3

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

也使用e.whichwhich is normalized for crossbrowser。

您可以尝试添加一个 keydown 处理程序以防止输入键并在 keyup 中执行操作。

演示: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;
}
于 2012-11-09T17:03:11.433 回答
0

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

于 2012-11-09T16:56:43.797 回答
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);
  }
于 2012-11-09T16:59:09.430 回答