2013-10-26 89 views
0

绑定()事件之后的状态如何bind()事件后能够正常运行的if语句执行中的jQuery/JavaScript的

看来我的代码不会执行if语句在YouTube链接的初始paste在我输入字段。

这里是我的http://jsfiddle.net/6Z3xP/1/

这只能在我贴的链接两届。

$(document).ready(function() { 
    var textval = $('#input'); 
    var youtube = /(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i; 

    $("#input").bind('paste', function() { 
     if (youtube.test(textval.val())) { 
      var yurl = textval.val().match(youtube)[0]; 
      alert(yurl); 
     } 
    }); 
}); 

我试过之后绑定添加$(document).ready(function()。但我似乎无法使它工作。

背景资料:我想在从用户粘贴YouTube链接以获取YouTube网址

回答

2

输入的值是不是该糊剂事件被触发立即可用,则需要耽误您的代码只是一瞬间让它变得可用。

小提琴:http://jsfiddle.net/8Pvr4/1/

唯一的变化是,在您绑定的回调代码现在裹着:

setTimeout(function() { 

},0); 

更可靠的方法是获得从事件对象的值通过:

e.originalEvent.clipboardData.getData('text/plain'); 

让你的绑定将成为:

$("#input").bind('paste', function(e) { 
    var val = e.originalEvent.clipboardData.getData('text/plain'); 
    if (youtube.test(val)) { 
     var yurl = val.match(youtube)[0]; 
     alert(yurl); 
    }    
}); 

小提琴:http://jsfiddle.net/8Pvr4/3/

+0

谢谢你。即时通讯相当新的JavaScript。我似乎无法找到一个关于'originalEvent'的好文档,你可以向我解释这个部分'var val = e.originalEvent.clipboardData.getData('text/plain');'真的有用吗?谢谢。 – bobbyjones

+0

当jQuery触发事件时,它通过的事件对象不是原始对象,它是具有规范化值的[自己的解释](http://api.jquery.com/category/events/event-object/)。所有jQuery的事件对象都具有'originalEvent'属性,它可以作为浏览器最初触发的任何传递。一旦你有了最初的粘贴事件,你只需要知道正确的访问属性/调用方法来获得你要找的东西,可以找到它的信息[Here](https://developer.mozilla。组织/ EN-US /文档/网络/ API/ClipboardEvent) – colbydauph

0

的问题是,在输入文本之前粘贴事件发生:

In Jquery How to handle paste?

这里是一个修正的小提琴。它仅执行您将数据粘贴到输入时指定的操作。

http://jsfiddle.net/pTmKc/2/

$(document).ready(function() { 
var textval = $('#input'); 
var youtube = /(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i; 

var pasting = false; 

$("#input").bind('paste', function() { 
    pasting = true; 
}); 

$("#input").bind('propertychange input', function() { 
    if(!pasting) { 
     return; 
    } 
    pasting = false; 

    if (youtube.test(textval.val())) { 
     var yurl = textval.val().match(youtube)[0]; 
     alert(yurl); 
    } 
}); 

});

0

您正在考虑“粘贴”事件的方式起作用,它实际上并不像那样工作。粘贴事件仅触发正在从剪贴板粘贴某些东西。它不提供正在粘贴的数据。当然,你可以从剪贴板访问它,但是Javascript限制了对剪贴板的访问,你需要以不同的方式处理它。看到这两个线程,你就会明白如何去做

  1. Intercept paste event in Javascript
  2. JavaScript get clipboard data on paste event (Cross browser)

希望它能帮助。