【问题标题】:keypress handler canceling the event按键处理程序取消事件
【发布时间】:2016-08-30 20:32:24
【问题描述】:

我有以下代码

 jQuery('#parent').on('keypress', '.textbox', function(e) {
    var btn = jQuery(this).closest('tr').find('.btn');
    if (btn.length) {
        btn.triggerHandler('click');
    }
});

此代码是一个委托的按键处理程序,它正在侦听具有类值“.textbox”的文本框的事件。 处理程序找到类为“.btn”的按钮并调用其单击处理程序,其中包含一个 ajax 调用。

问题是这似乎阻止了事件完成,即如果框中的值为“2”并且我输入“3”,则处理程序执行但框中的值仍然是“2”而不是“23”。

注释掉btn triggerHandler语句就正常了

知道为什么会这样吗?

【问题讨论】:

  • 使用keyup 而不是keypress
  • 也许你可以使用 btn.trigger("click")
  • @Grommy 与.trigger,triggerHandler & .click() 相同。
  • @Developer107 我可能会使用它,但想知道为什么会这样?概念失效还是什么?
  • .trigger和triggerHander,不一样的,可以看这里:stackoverflow.com/questions/7530987/…

标签: javascript jquery events jquery-events


【解决方案1】:

我认为你需要 keyup 功能。

$(document).ready(function(){
   $("input").keyup(function(){
var rs= $(this).val();
  alert(rs);
        $("input").css("background-color", "pink");
    });
  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
Enter your value: <input type="text">

【讨论】:

  • 我想知道为什么 keypress 被取消但 keyup 没有?
  • Keypress 仅在您按下任意键时触发,而 keyup 在用户释放键盘上的键时触发
  • 我明白,但这与触发无关。Keypress 和 Keyup 都在这里触发,但 Keypress 没有完成。即输入的值没有显示在文本框中。
  • 您需要键入事件以获取查询中提到的整个文本框值。
【解决方案2】:

使用keyup 而不是keypress。就像在您的脚本中一样,您触发了另一个事件。

jQuery('#parent').on('keyup', '.textbox', function(e) {
   var btn = jQuery(this).closest('tr').find('.btn');
   if (btn.length) {
     btn.triggerHandler('click');
   }
});

keypresstriggerHandler 打断,因此不允许发生默认的按键操作。而keyup 将首先执行默认操作,然后监听处理程序。

【讨论】:

  • 需要了解有关事件行为的更多信息。我希望它们都能正常工作。
  • 仍然无法弄清楚为什么keyup 会受到干扰,但keypress 会..如果是keydownmouseleave 或其他一些事件会怎样?
  • 你试过用trigger代替triggerHandler吗?看到这个 - stackoverflow.com/a/3772559/4719761 triggerHandler 防止事件链接
【解决方案3】:

尝试使用 'keypress' 或 'keyup' 的 'onchange'

  $(document).ready(function(){
  $("input").onchange(function(){
  var rs= $(this).val();
  alert(rs);
  $("input").css("background-color", "pink");
  });
});

【讨论】:

  • 我的问题是为什么 keypress 没有完成但 keyup 完成了?
  • keypress 在您按下键时起作用,它会在该值之前未在文本字段中输入之前引发事件,但在文本字段中输入值之后,keyup 会引发事件。但是如果你想在每个字母 keyup 和 onchange 事件中写一个字符串或一个单词 keup raise 事件在你更改时输入整个值后引发。
  • 是的,这在某种程度上是正确的......但是为什么在我的情况下完全取消了 Keypress?应该有一个完成点,应该在输入字段中插入字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-05
  • 2010-10-22
相关资源
最近更新 更多