在文本位于文本框之前,粘贴事件会被触发

时间:2012-03-13 18:43:07

标签: javascript jquery backbone.js

events: { "paste .youtube-url" : "addUrl" }

addUrl: function(){
  console.log(this.$(".youtube-url").val());

所以我想说我第一次将“bad”粘贴到文本框中

控制台输出 :(空字符串)

然后如果我粘贴附加类似“编码器”的东西

控制台输出:错误

而不是“badcoder”框中的内容,我猜这是因为在插入文本之前会触发伪粘贴事件。

2 个答案:

答案 0 :(得分:9)

您可以使用paste事件代替使用keyup事件,如果有人粘贴,则会触发该事件,但只有在输入值更新后才会触发。

<强>更新

来自@Micah(和@JohnnyO)的好评。这是我发现的解决方法:

$('input').on('paste', function () {
    var that = this;
    setTimeout(function () {
        alert(that.value);
    }, 0);
});​

这会设置超时,因此只有在运行堆栈中的其余代码之后才会运行读取输入值的代码。我只在Chrome 21中测试过,但是零时间超时似乎可以解决问题。

演示:http://jsfiddle.net/H4K4R/

答案 1 :(得分:4)

@Jasper的答案只有在键盘粘贴时才有效。使用鼠标和上下文菜单进行粘贴时,您将无法获得键盘事件。值得关注的最佳事件是'输入'事件。不幸的是,对于9之前的IE版本,你需要注意'propertychange'事件,因为它们不支持'input'。 'propertychange'不会冒泡,所以你无法像使用Backbone那样连接这个事件,而是需要将它直接绑定到'.youtube-url'元素。