繁体   English   中英

javascript:是否可以添加在默认行为后运行的事件处理程序?

[英]javascript: Possible to add event handler that runs after the default behavior?

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

这可能吗?

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

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

谢谢!

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

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

一个例子是:

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

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

});

编辑:发现了这个问题,这似乎是您的确切问题。

我看到除了问题中的名称以外,还有另一个问题。 在这方面,+ 1 Sam :)。

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

keypress气泡。 因此,请使用全局e.stopPropagation() ,然后将其用于本地需要的任何地方,请使用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();
};

这是在事件冒泡到浏览器之后运行自定义代码的一种方式,即,首先将键入的值添加到文本字段中,然后再运行自定义函数。 如果您愿意,您可以花更少的时间。

$("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;
});

工作演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM