最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - paste event gets fired before text is in textbox - Stack Overflow

programmeradmin9浏览0评论
events: { "paste .youtube-url" : "addUrl" }

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

So lets say I paste "bad" into the textbox first time

console output: (an empty string)

then if I paste append something like "coder"

console output: bad

instead of whats inside the box "badcoder", I guess this i because the pseudo paste event is fired before the text is inserted.

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

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

So lets say I paste "bad" into the textbox first time

console output: (an empty string)

then if I paste append something like "coder"

console output: bad

instead of whats inside the box "badcoder", I guess this i because the pseudo paste event is fired before the text is inserted.

Share Improve this question edited Aug 20, 2012 at 22:55 Jasper 76k14 gold badges152 silver badges148 bronze badges asked Mar 13, 2012 at 18:43 skyw00lkerskyw00lker 8199 silver badges20 bronze badges
Add a comment  | 

2 Answers 2

Reset to default 14

Instead of using the paste event you could use the keyup event which fires if someone pastes but also only fires after the value for the input has been updated.

UPDATE

Good comment from @Micah (and @JohnnyO). Here's a fix I found to work:

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

This sets a timeout so the code that reads the input's value is only run after the rest of the code in the stack has been run. I've only tested in Chrome 21 but the zero-time-timeout seems to do the trick.

Demo: http://jsfiddle.net/H4K4R/

The answer by @Jasper only works when pasting by keyboard. When using the mouse and the context menu to paste, you won't get a keyup event. The best event to watch for is the 'input' event. Unfortunately, for IE versions before 9, you'll need to watch for the 'propertychange' event instead because they don't support 'input'. 'propertychange' doesn't bubble, so you won't be able to wire up this event like you're doing using Backbone, and instead will need to bind it directly to the '.youtube-url' element.

发布评论

评论列表(0)

  1. 暂无评论