我正在尝试构建Facebook链接共享预览。对于那些在视觉上倾斜,这样的事情:动态防止onKeyUp功能
一切工作正常,但一对夫妇的小东西。链接共享预览会在相应文本区域中的键控功能中触发。事情是这样的:
$('#txtPublish').keyup(function(e){
if ($(this).val() != '' && $(this).parent().find('.share-with').hasClass('active')) {
detectHyperlink(e,this);
}
else {
//do whatever
}
});
和相应的detectHyperlink是这样开始的:
function detectHyperlink(e,textarea)
{
if((e.which == 13 || e.which == 32 || e.which == 17) && ($(textarea).val().trim() != "")){
var hyperlink_post = $('#txtPublish').val(); // make dynamic
if(hyperlink_post != null) {
hyperlink_post = " " + hyperlink_post;
var urlRegex = /(https?\:\/\/|\s)[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})(\/+[a-z0-9_.\:\;-]*)*(\?[\&\%\|\+a-z0-9_=,\.\:\;-]*)?([\&\%\|\+&a-z0-9_=,\:\;\.-]*)([\!\#\/\&\%\|\+a-z0-9_=,\:\;\.-]*)}*/i;
if(urlRegex.test(hyperlink_post)){
// SImple DOM Manipulation
$.ajax({
type: "post",
url: '/controller/crawlHyperlink',
data: {message: hyperlink_post},
cache: false,
success: function(data) {
//数据是JSON offcourse对于那些有兴趣在这些事情。
这工作正常,但问题是这样的:detectHyperlink方法不断调用不止一次。也就是说,一旦Textarea检测到超链接并共享信息,它仍然保持循环并对服务器进行Ajax调用。因此,当我点击“发布”按钮时,它仍然会向服务器发送几个调用来检测超链接,然后再将其发回。
你们能找到原因吗?
感谢
你试过'$( '#txtPublish')。一( 'KEYUP',函数(){...' – 2013-02-15 19:07:02
这样一个技术上将只执行一次的权利。所以在第一KEYUP的每个实例它会执行但不会在此之后执行?更正? – 2013-02-15 19:14:24
是的''.one('只会执行一次。 – 2013-02-15 19:15:31