2013-02-15 106 views
0

我正在尝试构建Facebook链接共享预览。对于那些在视觉上倾斜,这样的事情:动态防止onKeyUp功能

enter image description here

一切工作正常,但一对夫妇的小东西。链接共享预览会在相应文本区域中的键控功能中触发。事情是这样的:

$('#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调用。因此,当我点击“发布”按钮时,它仍然会向服务器发送几个调用来检测超链接,然后再将其发回。

你们能找到原因吗?

感谢

+0

你试过'$( '#txtPublish')。一( 'KEYUP',函数(){...' – 2013-02-15 19:07:02

+0

这样一个技术上将只执行一次的权利。所以在第一KEYUP的每个实例它会执行但不会在此之后执行?更正? – 2013-02-15 19:14:24

+0

是的''.one('只会执行一次。 – 2013-02-15 19:15:31

回答

0

你可能想,如果你使用jQuery重写它剿默认的超链接动作。

$('#txtPublish').keyup(function(e){ 
    if ($(this).val() != '' && $(this).parent().find('.share-with').hasClass('active')) { 
    detectHyperlink(e,this); 
    e.preventDefault();//prevents default submit() from firing 
    } 

此外,您可能要设置临时标志当AJAX调用,并防止它,如果设置了标志再次执行。

if (ajaxWasCalled==false) { 
    $.ajax({ 
    ... 
    ajaxWasCalled=true; 
    }); 
    }