我目前有一个文本框,我在焦点上调用键盘笔划:
$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");
});
});
如果我多次点击此按“输入”一次将导致许多警报,我该如何避免这种情况,以便只调用一次。
答案 0 :(得分:1)
每次字段获得焦点时,您都会添加事件侦听器。
只需在文档就绪函数中添加keydown,keyup监听器......
$(function() {
$("#myTextBox").keydown(function(e){
if(e.which==13)
e.preventDefault()
});
$("#myTextBox").keyup(function(e){
if(e.which ==13)
alert("hey");
});
});
答案 1 :(得分:0)
与其他人一样,您不必继续在focus
添加活动。同样,您应该将事件附加到文本框本身,因为这实际上是您在焦点上添加事件时尝试执行的操作。
$myTextBox.on({
'keydown': keyDown,
'keyup': keyUp
});
为了使您的应用程序不进入enter-alert-ok循环,您必须在alert()
调用之前关闭keyup侦听器,然后在按下ok之后将其重新打开。
答案 2 :(得分:-1)
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;
}
});
答案 3 :(得分:-1)
我看到你想做什么(或不是?)。您可以将事件附加到表单并排除textarea,而不是每次输入聚焦时将其添加到文档中。
$('form').on('keydown', function( e ) {
// Prevent submit when pressing enter but exclude textareas
if ( e.which == 13 && e.target.nodeName != 'TEXTAREA' ) {
e.preventDefault();
}
}