动态阻止onKeyUp功能

时间:2013-02-15 18:52:37

标签: jquery ajax onkeyup

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

enter image description here

一切都很好,但对于一些小事情。链接共享预览是在相应的textarea 中的键盘功能上触发的。像这样:

$('#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调用。因此,当我点击Post按钮时,它仍会向服务器发出一些调用,以便在实际发回此信息之前检测超链接。

你们可以找到原因吗?

谢谢

1 个答案:

答案 0 :(得分: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;
    });
  }