Javascript 如何延迟按enter键

Javascript 如何延迟按enter键,javascript,jquery,Javascript,Jquery,我是否可以通过单击enter来延迟或确保用户不发送垃圾邮件,我如何在我的enter按钮上设置按键延迟?设置延迟计时器或删除EventListener的最佳方法是什么?您可以在上次按Enter键后的一段时间内阻止默认操作: window.addEventListener('keydown', function(event) { onKeyDownHandler(event); }, false); function onKeyDownHandler(e) { var focu

我是否可以通过单击enter来延迟或确保用户不发送垃圾邮件,我如何在我的enter按钮上设置按键延迟?设置延迟计时器或删除EventListener的最佳方法是什么?

您可以在上次按Enter键后的一段时间内阻止默认操作:

window.addEventListener('keydown', function(event) {
     onKeyDownHandler(event);
}, false);


function onKeyDownHandler(e)
{
    var focus_id = e.target.id;
    switch (e.keyCode) {
          case 13: // enter
          if(focus_id == "Text1")
          {
            alert("function 1");
          }else if(focus_id == "Text2")
          {
            alert("function 2");
          }else if(focus_id == "Text3")
          {
            alert("function 3");
          }
          return;
    }
}

旁注:

  • 由于
    addEventListener
    回调的返回值被完全忽略,并且
    addEventListener
    只使用一个参数调用处理程序,因此如果您没有在处理程序中使用
    this
    (看起来不是),则无需在
    onKeyDownHandler
    周围包装函数;直接用就行了
  • 一些浏览器使用
    which
    作为键码,其他浏览器使用
    keycode
    ,这就是我在
    开关中使用
    e.which | e.keycode
    的原因。JavaScript的功能异常强大的
    |
    操作符将使用
    e.which
    如果它不是假的,则使用
    e.keyCode

您可以在上次按Enter键后的一段时间内阻止默认操作:

window.addEventListener('keydown', function(event) {
     onKeyDownHandler(event);
}, false);


function onKeyDownHandler(e)
{
    var focus_id = e.target.id;
    switch (e.keyCode) {
          case 13: // enter
          if(focus_id == "Text1")
          {
            alert("function 1");
          }else if(focus_id == "Text2")
          {
            alert("function 2");
          }else if(focus_id == "Text3")
          {
            alert("function 3");
          }
          return;
    }
}

旁注:

  • 由于
    addEventListener
    回调的返回值被完全忽略,并且
    addEventListener
    只使用一个参数调用处理程序,因此如果您没有在处理程序中使用
    this
    (看起来不是),则无需在
    onKeyDownHandler
    周围包装函数;直接用就行了
  • 一些浏览器使用
    which
    作为键码,其他浏览器使用
    keycode
    ,这就是我在
    开关中使用
    e.which | e.keycode
    的原因。JavaScript的功能异常强大的
    |
    操作符将使用
    e.which
    如果它不是假的,则使用
    e.keyCode

您可以使用jQuery插件仅在按键按下事件暂停时处理调用您的函数。

您可以使用jQuery插件仅在按键按下事件暂停时处理调用您的函数。

您可以在按enter键时创建一个超时,然后在按另一个enter键时创建一个超时,用新超时覆盖以前的超时。这意味着,例如,如果在第一个超时结束之前再次按enter键,则第一个超时将被新超时覆盖,以便在执行实际超时之前获得新的x时间量。这会一直持续到无穷远

例如:

$(window).on("keydown", function(e) {
    onKeyDownHandler(e);
});
var lastEnter = null;
function onKeyDownHandler(e) {
    var focus_id = e.target.id;
    switch (e.which) { // jQuery normalizes this for you
        case 13:
            if (lastEnter && Date.now() - lastEnter < 5000) {
                e.preventDefault();
                return;
            }
            lastEnter = Date.now();

            // Enter key processing...
            break;
        // ...other keys...
    }
}

您可以在enter键上创建一个超时,在另一个enter键上,用新的超时覆盖以前的超时。这意味着,例如,如果在第一个超时结束之前再次按enter键,则第一个超时将被新超时覆盖,以便在执行实际超时之前获得新的x时间量。这会一直持续到无穷远

例如:

$(window).on("keydown", function(e) {
    onKeyDownHandler(e);
});
var lastEnter = null;
function onKeyDownHandler(e) {
    var focus_id = e.target.id;
    switch (e.which) { // jQuery normalizes this for you
        case 13:
            if (lastEnter && Date.now() - lastEnter < 5000) {
                e.preventDefault();
                return;
            }
            lastEnter = Date.now();

            // Enter key processing...
            break;
        // ...other keys...
    }
}