按 Enter 键后使用 preventdefault 退出循环
Use a preventdefault to get out of the loop after pressing Enter key
这是对我最初问题的完整修改,删除了所有不必要的资源和参考
我将同一个事件侦听器绑定到 2 个不同的元素:按钮和 Enter 键,如下所示:
var funcelement = function(){
//function code
};
$('#buttonID').click(funcelement);
$('#inputID').keyup(function () {
if (event.which == 13) {
$('#buttonID').trigger('click');
}
})
我想做的是在焦点位于提交按钮 (#buttonID) 上时使用 preventDefault() 来防止回车键传播。
所以我尝试了各种组合来让它发挥作用。以下是我尝试的最新结果
$('#inputID').keyup(function () {
var hasfocus = $('#buttonID').is(':focus') || false;
if (event.which == 13) {
if (!hasfocus) {
event.preventDefault();
$('#buttonID').trigger('click');
//hasfocus = true;
}
else {
//event.preventDefault();
//$('#buttonID').trigger('click');
}
}
})
当我在输入框中输入文本并按下 Enter 键后,弹出确认 window 和 yes/cancel 按钮,焦点在是按钮上。当我再次按下 Enter 键时,另一个 window 确认已进行更改弹出,并带有聚焦在其上的“确定”按钮。一旦我再次按下 Enter,我需要的一切都在制作中。
但是,有一个问题:完成最后一步后,我将返回 if (!hasfocus) 行。
如何防止这种情况发生?一旦我需要的东西完成 - 我不想再进入那行。
您可以将参数传递给函数并停止那里的传播,如下所示:
var funcelement = function(event, wasTriggeredByEnterKey){
if (wasTriggeredByEnterKey && $('#buttonID').is(':focus')) {
event.stopPropagation;
}
//function code
};
$('#buttonID').click(funcelement);
$('#inputID').keyup(function () {
if (event.which == 13) {
$('#buttonID').trigger('click', [true]);
}
}
)
更新
为了回答您修改后的问题,您在处理警报时应该使用 "keydown" 事件而不是 "keyup"。这是因为警报以 "keydown" 事件关闭,但是当您释放回车键时您仍然触发 "keyup" 事件。只需像这样更改一个单词:
$('#inputID').keydown(function () {
var hasfocus = $('#buttonID').is(':focus') || false;
if (event.which == 13) {
if (!hasfocus) {
event.preventDefault();
$('#buttonID').trigger('click');
//hasfocus = true;
}
else {
//event.preventDefault();
//$('#buttonID').trigger('click');
}
}
})
这是对我最初问题的完整修改,删除了所有不必要的资源和参考
我将同一个事件侦听器绑定到 2 个不同的元素:按钮和 Enter 键,如下所示:
var funcelement = function(){
//function code
};
$('#buttonID').click(funcelement);
$('#inputID').keyup(function () {
if (event.which == 13) {
$('#buttonID').trigger('click');
}
})
我想做的是在焦点位于提交按钮 (#buttonID) 上时使用 preventDefault() 来防止回车键传播。
所以我尝试了各种组合来让它发挥作用。以下是我尝试的最新结果
$('#inputID').keyup(function () {
var hasfocus = $('#buttonID').is(':focus') || false;
if (event.which == 13) {
if (!hasfocus) {
event.preventDefault();
$('#buttonID').trigger('click');
//hasfocus = true;
}
else {
//event.preventDefault();
//$('#buttonID').trigger('click');
}
}
})
当我在输入框中输入文本并按下 Enter 键后,弹出确认 window 和 yes/cancel 按钮,焦点在是按钮上。当我再次按下 Enter 键时,另一个 window 确认已进行更改弹出,并带有聚焦在其上的“确定”按钮。一旦我再次按下 Enter,我需要的一切都在制作中。
但是,有一个问题:完成最后一步后,我将返回 if (!hasfocus) 行。
如何防止这种情况发生?一旦我需要的东西完成 - 我不想再进入那行。
您可以将参数传递给函数并停止那里的传播,如下所示:
var funcelement = function(event, wasTriggeredByEnterKey){
if (wasTriggeredByEnterKey && $('#buttonID').is(':focus')) {
event.stopPropagation;
}
//function code
};
$('#buttonID').click(funcelement);
$('#inputID').keyup(function () {
if (event.which == 13) {
$('#buttonID').trigger('click', [true]);
}
}
)
更新
为了回答您修改后的问题,您在处理警报时应该使用 "keydown" 事件而不是 "keyup"。这是因为警报以 "keydown" 事件关闭,但是当您释放回车键时您仍然触发 "keyup" 事件。只需像这样更改一个单词:
$('#inputID').keydown(function () {
var hasfocus = $('#buttonID').is(':focus') || false;
if (event.which == 13) {
if (!hasfocus) {
event.preventDefault();
$('#buttonID').trigger('click');
//hasfocus = true;
}
else {
//event.preventDefault();
//$('#buttonID').trigger('click');
}
}
})