Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在文本进入文本框之前触发粘贴事件_Javascript_Jquery_Backbone.js - Fatal编程技术网

Javascript 在文本进入文本框之前触发粘贴事件

Javascript 在文本进入文本框之前触发粘贴事件,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,假设我第一次将“bad”粘贴到文本框中 控制台输出(空字符串) 然后如果我粘贴一个类似“coder”的东西 控制台输出:错误 与“badcoder”框中的内容不同,我猜这是因为伪粘贴事件是在插入文本之前触发的。您可以使用粘贴事件而不是键控事件,该事件在有人粘贴时触发,但也只能在输入值更新后触发 更新 来自@Micah(和@JohnnyO)的好评。我发现了一个可行的解决方案: events: { "paste .youtube-url" : "addUrl" } addUrl: function

假设我第一次将“bad”粘贴到文本框中

控制台输出(空字符串)

然后如果我粘贴一个类似“coder”的东西

控制台输出:错误


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

您可以使用
粘贴事件而不是
键控事件,该事件在有人粘贴时触发,但也只能在输入值更新后触发

更新

来自@Micah(和@JohnnyO)的好评。我发现了一个可行的解决方案:

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

addUrl: function(){
  console.log(this.$(".youtube-url").val());
这将设置超时,以便读取输入值的代码仅在堆栈中的其余代码运行后运行。我只在Chrome21上进行了测试,但是零时间超时似乎可以解决这个问题


演示:

只有通过键盘粘贴时,@Jasper的答案才有效。当使用鼠标和关联菜单进行粘贴时,不会出现keyup事件。要监视的最佳事件是“输入”事件。不幸的是,对于9之前的IE版本,您需要注意'propertychange'事件,因为它们不支持'input'propertychange不会冒泡,因此您将无法像使用主干一样连接此事件,而是需要将其直接绑定到“.youtube url”元素

注意:正如#JohnnyO提到的那样,如果上下文菜单用于粘贴,则不会触发
keyup
事件。@Micah捕捉得好。我用另一个方法更新了我的答案。
事件:{“change.youtube url”:“addUrl”}
可能是另一个选项,但事件在焦点离开文本框之前不会触发。
$('input').on('paste', function () {
    var that = this;
    setTimeout(function () {
        alert(that.value);
    }, 0);
});​