2013-02-28 33 views
7

Tôi đang gọi một hàm (bên dưới) sẽ thực hiện hành động nếu người dùng nhấn nút xóa. Nó hoạt động tốt nhưng tôi chỉ cần thực hiện nó trên trang chứ không phải khi người dùng đang gõ (bên trong một đầu vào hoặc bên trong một vùng văn bản).Phím tắt jQuery nhưng bỏ qua nếu trong hộp văn bản

$(window).keydown(function (evt) { 
    if (evt.which == 46) { // delete 
     goDoSomething(); 
    } 
}); 

Bất kỳ ý tưởng how I can amend the above để not fire nếu người dùng là in một input hoặc textarea?

Cảm ơn trước,

Dave loại

Trả lời

14

séc evt.target của:

$(window).keydown(function (evt) { 
    if (evt.target.tagName.toLowerCase() !== 'input' && 
     evt.target.tagName.toLowerCase() !== 'textarea' && evt.which == 46) { // delete 
     goDoSomething(); 
    } 
}); 
+0

Hoạt động tốt, cảm ơn bạn đã trả lời nhanh. Được đánh dấu là câu trả lời – dhardy

+0

@dhardy Tôi rất vui vì nó đã giúp – karaxuna

0

Bạn có thể có một biến toàn cầu và đặt nó vào một cái gì đó khi một hộp văn bản được tập trung vào và đặt lại nó làm mờ. Một cái gì đó như thế này:

var textboxSelected = false; 

$(":input").focus(function() { 
    textboxSelected = true; 
}); 
$(":input").blur(function() { 
    textboxSelected = false; 
}); 

Sau đó, trong sự kiện onKeyDown bạn kiểm tra xem biến được thiết lập để sai trước khi thực hiện phần còn lại của các chức năng:

$(window).keydown(function (evt) { 
if (evt.which == 46 && textboxSelected == false) { 

    goDoSomething(); 
} 
}); 
0

thử sometihing như thế này:

$(window).keydown(function (evt) { 
    if(evt.target != $('input') && evt.target != $('textarea')){ 
    if (evt.which == 46) { // delete 
     goDoSomething(); 
    } 
    } 
}); 
Các vấn đề liên quan