【问题标题】:javascript: Possible to add event handler that runs after the default behavior?javascript:可以添加在默认行为之后运行的事件处理程序吗?
【发布时间】:2012-12-20 16:31:31
【问题描述】:

我有一个事件处理程序,我希望在该事件的默认 javascript 处理发生后执行。

这可能吗?

编辑: 例如: 每次触发按键事件时,我都会记录有关该按键的事件信息(类似于 console.log)。现在,当我按下退格键并通过事件处理程序查看字段内容时,文本字段的值会生成没有退格键的值,因为事件处理程序会在实际删除最后一个字母之前获取字段的内容。

在这种情况下,我希望发生默认退格事件,然后在完成时触发我的事件处理程序。

谢谢!

【问题讨论】:

  • 你指的是哪种默认处理方式?
  • 哪个事件?简单地等待 0 毫秒怎么样?
  • @Sam 浏览器操作,我假设。它通常被称为“默认操作”。
  • @Sam:按键事件,具体来说。
  • @JanDvorak 我并没有真正看到这个问题,因为您可以在点击(等)处理程序中调用一个函数,但我想帮忙。 JeffK -> 您能否向我们展示您遇到问题的实际代码并添加更多信息?

标签: javascript event-handling


【解决方案1】:

我相信您的问题是由监听 keypress 事件而不是 keyup 事件引起的。基本上这意味着您在将字符放入 dom 之前获取 textarea 的值。

尝试将您的按键处理程序更改为按键处理程序。

一个例子是:

$('input, textarea').keyup(function(ev) {

    console.log( $(this).val() );

});

编辑:找到this 问题,这似乎是您的确切问题。

【讨论】:

  • 没问题!快乐编码:)
【解决方案2】:

我发现除了问题中的名称之外还有一个不同的问题。在这方面,+1 Sam :)。

但是,我想在这里解决这个问题,而不仅仅是分支。有一种方法可以处理特定的按键事件或默认为一个。

keypress 气泡。所以使用一个全局的,然后在本地需要它的任何地方,使用e.stopPropagation() 以阻止它冒泡。这是它的工作演示:http://jsfiddle.net/2EwhR/

这里是html:

<div id="d1">_</div>
<br><hr>
<div id="d2"><input id="i1" type="text" /></div>

js:

var d1 = document.getElementById("d1");
window.onkeypress = function(ev){
 d1.innerHTML = "keyCode: " + ev.keyCode;
};
var d2 = document.getElementById("d2");
var i1 = document.getElementById("i1");
d2.onkeypress = function(ev){
  d1.innerHTML = "blocked";
  ev.stopPropagation();
};

【讨论】:

    【解决方案3】:

    这将是在事件冒泡到浏览器后运行自定义代码的一种方式,即首先将输入的值添加到文本字段,然后一秒钟后您的自定义函数将运行。如果您愿意,您可以缩短此时间。

    $("input").on("keypress", function () {
      setTimeout(function () {
        alert("new value should have been already added to text field. Now we are executing some custom stuff");
      }, 1000);
      return true;
    });
    

    working demo

    【讨论】:

      猜你喜欢
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多