2

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

这可能吗?

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

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

谢谢!

4

3 回答 3

4

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

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

一个例子是:

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

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

});

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

于 2013-01-06T22:55:38.807 回答
1

我看到除了问题中的名称之外还有一个不同的问题。在这方面,+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();
};
于 2013-01-06T23:05:19.657 回答
0

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

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

工作演示

于 2013-01-06T22:53:21.810 回答