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.whichクロスブラウザ用に正規化されたものも使用します。

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 に答える