2013-02-28 4 views
7

Ich rufe eine Funktion (unten), die eine Aktion ausführen wird, wenn der Benutzer die Schaltfläche zum Löschen drückt. Es funktioniert gut, aber ich muss es nur auf der Seite tun und nicht wenn ein Benutzer schreibt (innerhalb einer Eingabe oder in einem Textfeld).jQuery keydown, aber ignorieren, wenn in Textfeld

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

Irgendwelche Ideen how I can amend the above zu not fire, ob der Benutzer in ein input oder textarea?

Vielen Dank im Voraus,

Dave

Antwort

14

Typ Check evt.target:

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

Funktioniert gut, danke für die schnelle Antwort. Als Antwort markiert – dhardy

+0

@dhardy Ich bin froh, dass es geholfen hat – karaxuna

0

Sie könnten eine globale Variable haben und es auf etwas gesetzt, wenn ein Textfeld auf und es fokussiert wird zurückgesetzt auf Unschärfe. Etwas wie folgt aus:

var textboxSelected = false; 

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

Dann in Ihrem onKeyDown Fall überprüfen, ob die Variable auf false gesetzt ist, bevor der Rest der Funktionalität ausführt:

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

    goDoSomething(); 
} 
}); 
0

try sometihing wie folgt aus:

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