14

押した後、イベントenterのみを発生させたいのですが、最初に発生させます。で発射されたときにキャンセルする方法は?keyupblurblurkeyupenter

blurと の両方をkeyup1 つのlive()メソッドにバインドすることは提案しないでください。

$(".textbox").on("blur",function () { 
    alert("blur Event fired");
});

$(".textbox").on("keyup",function (event) { 
    if(event.keyCode == 13){ // Detect Enter
        alert("KeyUp fired after pressing Enter");
    }
});
4

8 に答える 8

8

編集

両方のイベントが発生しないようにするには、要素がフォーカスを失う前に何らかの方法で要素をマークする必要があります。こうすることで、blurイベント ハンドラーは、イベントがキーアップの対象であるかどうか、または正当にフォーカスを失ったかどうかを判断できます。このようなもの:

$(".textbox").live("blur",function (event) {
    if (!$(this).hasClass('keyupping'))
        alert("blur Event fired");
});

$(".textbox").live("keyup",function (event) {
    $(this).addClass('keyupping');
    if(event.keyCode == 13){ // Detect Enter
        alert("KeyUp fired after pressing Enter");
    }
    $(this).removeClass('keyupping');
});

試してみてください: http://jsfiddle.net/GRMule/sR6zm/


元の答え

イベントがkeyup発生すると、ドキュメントからフォーカスを取得してモーダル ダイアログに適用するブラウザー アラート ダイアログを描画する準備が整います。これにより、blur イベントが発生します。

次に、何がヒットしたかを知るblur前に、イベントがジャンプして実行コンテキストを終了します。keyup

これは、次のように要素からフォーカスを外さないものを使用することによって実証されconsole.logます: http://jsfiddle.net/GRMule/7vRLW/

イベントが発生する順序は実装固有です。つまり、IE のように動作する Firefox に依存することはできません。仕様を参照してください: http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-eventgroupings。IE でアラートをいじってみてください。この場合、blur以前keyupは IE 7 でblur発生していましたが、Chrome では発生しませんでした。

于 2012-06-21T16:59:22.417 に答える
-1

属性を変更できなかっclassたので、結局、

$(".textbox").on("blur",function () { 
    if($(this).attr('flag')!='1') 
        alert("blur Event fired");
});

$(".textbox").on("keyup",function (event) { 
    $(this).attr('flag','1');
    if(event.keyCode == 13){ // Detect Enter
        alert("KeyUp fired after pressing Enter");
    }
    $(this).attr('flag','0');
});
于 2014-09-27T06:23:00.373 に答える
-3

より完全な説明とコード例を提供する必要があるというヒントを提供するのではなく、私の注意を引いたので、ここに示します。外部変数を設定する安価な方法は常にあります。

var triggerBlur = true;
$(".textbox")
    .live({
       blur : function () { 
        if (triggerBlur) {// if not preceded by keyup 'Enter' event
            alert("blur Event fired");
        }
        // reset variable to true to allow the blur event to be triggered subsequently when not preceded by keyup 'Enter' event
        triggerBlur = true;
      },
      keyup : function (event) { 
        if(event.which === 13){ // Detect Enter
            alert("KeyUp fired after pressing Enter");
            triggerBlur = false;
        }
      });

また、event.keyCode よりも event.which を使用することをお勧めします (理由については、 http: //api.jquery.com/event.which/ を参照してください)。後者が壊れているため、javascript の等価 '==' ( Which equals operator (== vs ===) should be used in JavaScript comparisons? を参照)

于 2012-06-21T17:20:39.593 に答える