0

我正在尝试构建 Facebook 之类的链接共享预览。对于那些有视觉倾向的人,这样的事情:

在此处输入图像描述

一切都很好,但有一些小事情。链接共享预览是在相应的 textarea 中的 keyup 函数触发的。像这样的东西:

$('#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 格式的。

这工作正常,但问题是:detectHyperlink 方法不断被调用不止一次。也就是说,一旦 Textarea 检测到超链接并共享信息,它仍然会继续循环并向服务器发出 ajax 调用。因此,当我点击 Post 按钮时,它仍然会向服务器发出几次调用以检测超链接,然后才能实际发布此信息。

你们能看出原因吗?

谢谢

4

1 回答 1

0

You may want to supress the default hyperlink action if you are overriding it with 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
    }

In addition you may want to set a temporary flag when the ajax is called, and prevent it from executing again if the flag is set.

if (ajaxWasCalled==false) {
  $.ajax({
    ...
    ajaxWasCalled=true;
    });
  }
于 2013-02-15T19:09:08.100 回答