events: { "paste .youtube-url" : "addUrl" }
addUrl: function(){
console.log(this.$(".youtube-url").val());
所以我想说我第一次将“bad”粘贴到文本框中
控制台输出 :(空字符串)
然后如果我粘贴附加类似“编码器”的东西
控制台输出:错误
而不是“badcoder”框中的内容,我猜这是因为在插入文本之前会触发伪粘贴事件。
答案 0 :(得分:9)
您可以使用paste
事件代替使用keyup
事件,如果有人粘贴,则会触发该事件,但只有在输入值更新后才会触发。
<强>更新强>
来自@Micah(和@JohnnyO)的好评。这是我发现的解决方法:
$('input').on('paste', function () {
var that = this;
setTimeout(function () {
alert(that.value);
}, 0);
});
这会设置超时,因此只有在运行堆栈中的其余代码之后才会运行读取输入值的代码。我只在Chrome 21中测试过,但是零时间超时似乎可以解决问题。
答案 1 :(得分:4)
@Jasper的答案只有在键盘粘贴时才有效。使用鼠标和上下文菜单进行粘贴时,您将无法获得键盘事件。值得关注的最佳事件是'输入'事件。不幸的是,对于9之前的IE版本,你需要注意'propertychange'事件,因为它们不支持'input'。 'propertychange'不会冒泡,所以你无法像使用Backbone那样连接这个事件,而是需要将它直接绑定到'.youtube-url'元素。