Javascript 避免在.focus中使用多个事件侦听器
我目前有一个文本框,我在焦点上调用键盘笔划:Javascript 避免在.focus中使用多个事件侦听器,javascript,jquery,Javascript,Jquery,我目前有一个文本框,我在焦点上调用键盘笔划: $myTextBox.on('focus', function(e){ $(document).keydown(function(e){ if(e.which==13) e.preventDefault() }); $(document).keyup(function(e){ if(e.which ==13) alert("hey"); }); });
$myTextBox.on('focus', function(e){
$(document).keydown(function(e){
if(e.which==13)
e.preventDefault()
});
$(document).keyup(function(e){
if(e.which ==13)
alert("hey");
});
});
如果我多次单击此按钮,按一次“enter”键将导致许多警报,我如何避免此情况,使其仅被调用一次
var alreadyPressed = false;
$("textarea").keypress(function (e) {
if (e.which == 13) {
e.preventDefault();
alreadyPressed = true
}
});
$("textarea").keyup(function (e) {
if (e.which == 13 && !alreadyPressed) {
alert("hey");
alreadyPressed = false;
}
});
我知道你想做什么(或不想?)。您可以将事件附加到表单并排除textarea,而不是在每次集中输入时将其添加到文档中
$('form').on('keydown', function( e ) {
// Prevent submit when pressing enter but exclude textareas
if ( e.which == 13 && e.target.nodeName != 'TEXTAREA' ) {
e.preventDefault();
}
}
我知道你想做什么(或不想?)。您可以将事件附加到表单并排除textarea,而不是在每次集中输入时将其添加到文档中
$('form').on('keydown', function( e ) {
// Prevent submit when pressing enter but exclude textareas
if ( e.which == 13 && e.target.nodeName != 'TEXTAREA' ) {
e.preventDefault();
}
}
每次字段获得焦点时,都会添加事件侦听器 只需在documentready函数中添加keydown、keydup侦听器
$(function() {
$("#myTextBox").keydown(function(e){
if(e.which==13)
e.preventDefault()
});
$("#myTextBox").keyup(function(e){
if(e.which ==13)
alert("hey");
});
});
每次字段获得焦点时,您都要添加事件侦听器 只需在documentready函数中添加keydown、keydup侦听器
$(function() {
$("#myTextBox").keydown(function(e){
if(e.which==13)
e.preventDefault()
});
$("#myTextBox").keyup(function(e){
if(e.which ==13)
alert("hey");
});
});
正如其他人所说,您不必一直在
焦点上添加事件。同样,您应该只将事件附加到文本框本身,因为这实际上是您在焦点上添加事件时尝试执行的操作
$myTextBox.on({
'keydown': keyDown,
'keyup': keyUp
});
为了使应用程序不进入enter-alert-ok循环,您必须在调用alert()
之前关闭keyup侦听器,然后在单击ok后将其重新打开
正如其他人所说,您不必一直在焦点上添加事件。同样,您应该只将事件附加到文本框本身,因为这实际上是您在焦点上添加事件时尝试执行的操作
$myTextBox.on({
'keydown': keyDown,
'keyup': keyUp
});
为了使应用程序不进入enter-alert-ok循环,您必须在调用alert()
之前关闭keyup侦听器,然后在单击ok后将其重新打开
他甚至没有提到textarea,只提到textbox。他甚至没有提到textarea,只提到textbox。你将keyup/keydown侦听器添加到整个文档中?为什么会有否决票?我讨厌人们只是对答案投否决票,而不提供理由。将keyup/keydown事件添加到整个文档中是一项开销,而不是他试图做的事情所需要的。@Calvin.Allen-有什么区别-_-每次textbox获得焦点时,您都会将事件侦听器添加到文档中。令人不快的不仅如此,将侦听器添加到文档中意味着它将针对文档而不是文本框启动。您将向整个文档中添加键向上/键向下侦听器?为什么会有向下投票?我讨厌人们只是对答案投否决票,而不提供理由。将keyup/keydown事件添加到整个文档中是一项开销,而不是他试图做的事情所需要的。@Calvin.Allen-有什么区别-_-每次textbox获得焦点时,您都会将事件侦听器添加到文档中。令人不快的不仅如此,将侦听器添加到文档中意味着它将针对文档而不仅仅是文本框启动。