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

sky*_*ker 6 javascript jquery backbone.js

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

addUrl: function(){
  console.log(this.$(".youtube-url").val());
Run Code Online (Sandbox Code Playgroud)

所以我想说我第一次将"坏"粘贴到文本框中

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

那么如果我粘贴附加类似"编码器"的东西

控制台输出:坏

而不是在"badcoder"框中的内容,我想这是因为在插入文本之前触发了伪粘贴事件.

Jas*_*per 10

paste您可以使用在keyup有人粘贴时触发的事件,而不是在更新输入值后触发的事件,而不是使用事件.

UPDATE

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

$('input').on('paste', function () {
    var that = this;
    setTimeout(function () {
        alert(that.value);
    }, 0);
});?
Run Code Online (Sandbox Code Playgroud)

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

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

  • 注意:正如#JohnnyO所提到的,如果使用上下文菜单进行粘贴,则不会触发`keyup`事件。 (2认同)