javascript - 按 Enter 键后使用 Preventdefault 退出循环

标签 javascript preventdefault

这是对我最初问题的完整修订,所有不必要的资源和引用都已删除

我将同一个事件监听器绑定(bind)到 2 个不同的元素:一个按钮和 Enter 键,它如下所示:

var funcelement = function(){
    //function code
};


$('#buttonID').click(funcelement);


$('#inputID').keyup(function () {
   if (event.which == 13) {
      $('#buttonID').trigger('click');
   }
})

我想要做的是,如果焦点位于提交按钮(#buttonID)上,则通过使用 PreventDefault() 来阻止 Enter 键按下的传播。

所以我尝试了各种组合来使其发挥作用。以下是我尝试的最新结果

$('#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 键后,会弹出一个带有"is"/“取消”按钮的确认窗口,焦点位于"is"按钮上。再次按 Enter 后,会弹出另一个窗口,确认已进行更改,其中“确定”按钮集中在该窗口上。当我再次按下 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”事件关闭,但当您释放 Enter 键时仍然触发“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');
     }

   }
})

关于javascript - 按 Enter 键后使用 Preventdefault 退出循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38468008/

相关文章:

javascript - bootstrap 选项卡单击 preventDefault 不起作用

javascript - 防止在 jQuery 表单上提交

jquery - # HREF 中的(散列)字符会阻止 PreventDefault 工作

javascript - jquery:从选择器中查找最后一个子项

javascript - Angularjs - 如何 'ng-repeat' 'value in ng-model' 次 div?

javascript - React navigation 5从堆栈导航器中隐藏标签栏

javascript - 在部分不可见/事件时隐藏 iFrame

javascript - 如何在覆盖警报功能后停止显示警报框

javascript - 在较小的父 div 内包含一个较大的可拖动子 div

ios - 触摸并拖动输入字段时无法阻止拖动页面jquery mobile phonegap ios