[英]How to deactivate keypress event at textarea
我正在編寫一個JavaScript應用程序。 我用過類似的東西
document.keypress = function(e) {
switch(e.which){
case 97:
alert('foobar');
break;
.......
而且效果很好! 現在,在html頁面的某個地方,我有一個textarea,現在,每當我鍵入a
(即ASCII 97),它就會a
alert
(很明顯)。
問題是我該如何預防? 我的按鍵事件對除textareas和文本字段之外的所有內容都起作用?
您可以使用target
屬性來標識觸發事件的元素。 然后,使用tagName
找出元素類型。
您可以使用其他屬性(例如type
來確定它是否是文本字段。
document.keypress = function(e) {
var target = e.target;
var elementType = target.tagName.toLowerCase();
if (elementType != "textarea" && !(elementType =="input" && target.type =="text")) {
switch(e.which){
case 97:
alert('foobar');
break;
.......
您可以指定要向其添加事件偵聽器的元素/元素,例如:
document.getElementById('text-field').keypress = function (e) {
var code = e.keyCode || e.which;
switch (code) {
case 97:
alert('foobar');
break;
....
}
}
我認為您正在尋找的是jQuery的stopPropagation方法。
從文檔-
防止事件使DOM樹冒泡,從而防止任何父處理程序收到該事件的通知。
$(':input').on('keypress', function(e) {
e.stopPropagation();
});
當您在文本框中單擊時,將不會顯示警報。 當您單擊文檔中的其他任何位置時,將顯示警報。
我可以看到兩種可能的方法:
在文本輸入中添加onfocus / onblur處理程序,以清除/設置document.keypress。
在處理程序中,獲取當前關注的元素
然后使用.tagName和.type屬性確定它是否為文本輸入。
您可以使用jQuery的keyPress
方法。
使用方法如下:
$("#target").keypress(function(e) {
e.preventDefault();
});
嘗試以下操作:
$(document).on("keypress",function(e){
switch(e.which){
case 97:
alert('foobar');
break;
}
});
$('textarea,input[type="text"]').on("keypress",function(e){
e.stopPropagation();
});
這是小提琴: http : //jsfiddle.net/m7ghb/
希望對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.