2

私はこのコードをよりクリーンにするための解決策を見つけようとしています:

$(document).keypress(function(ev){
         if($("#dialog").is(':visible') === false && $("#alertDialog").is(':visible') === false){
            if(ev.keyCode=='13' && !$('#resetBtn').is(':focus') && !$('.edit-new').is(':focus') && !$('.edit-trash').is(':focus')){
                return validateForm('valueTable');
            } 
            if(ev.keyCode=='27'){
                $('#resetBtn').click();
            }
         }
     });

ご覧のとおり、イベントを実行する前に、3つの個別の入力がフォーカスにないかどうかを確認しています。#resetBtn、.edit-new、.edit-trashを1つの適切にパックされたセレクターにターゲティングする方法はありますか?

4

3 に答える 3

3

これはあなたが望むことをしますか?

$('#resetBtn:focus, .edit-new:focus, .edit-trash:focus').length === 0

可視性チェックにも同様のステートメントを使用できます。

于 2012-11-14T16:41:38.723 に答える
2

はい、このように$('#resetBtn, .edit-new, .edit-trash'):)

于 2012-11-14T16:40:11.757 に答える
1

単一のセレクターを使用して、返された要素の長さを確認するだけで済みます。false代わりにlengthプロパティをチェックできる場合と、等しいかどうかを明示的にチェックする理由はありません。

// Handle the keypress event on the document object
$(document).on("keypress", function (event) {
    // Proceed if no visible dialogs
    if (!$("#dialog:visible, #alertDialog:visible").length) {
        // Checking which key was pressed
        switch (event.which) {
            case 13:
                // If no focus is on #resetBtn, .edit-new, or .edit-trash
                if (!$("#resetBtn:focus, .edit-new:focus, .edit-trash:focus").length) {
                    return validateForm("valueTable");
                }
                break;
            case 27:
                // Trigger the click event on #resetBtn
                $("#resetBtn").trigger("click");
        }
    }
});
于 2012-11-14T16:56:32.987 に答える