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();
            }
         }
     });

如您所见,在执行我的事件之前,我正在检查三个单独的输入是否不在焦点中。有没有办法将#resetBtn、.edit-new、.edit-trash 定位到一个包装精美的选择器中?

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当我们可以检查长度属性时,没有理由显式检查是否相等:

// 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 回答