2011-06-10 106 views
0

我收到了自己与这个jQuery代码混淆,所以我希望有人可以帮助! 解释:用户点击一个链接,默认动作被阻止。 AJAX调用用于创建具有焦点的文本输入字段的表单。在一个简单的情况下,当用户将注意力从远程领域转移到表单时,服务器端会发生重定向。我正在努力解决取消功能。我希望用户能够重新点击原始链接以删除文本输入并停止提交表单。目前,虽然输入字段被删除,但表单仍然被提交,可能是因为焦点已从中删除。jquery live,点击并删除

我知道我不能使用toggle()方法,因为我需要能够绑定live(),因为创建的新元素。

有什么想法?

$('.add_tag').live('click', function(e){ 
     e.preventDefault(); 

       $.post($.baseurl+'messages/add_tag', function(data) { 
        $('.user_tags ul').prepend(data).hide().slideDown(); 
        $('#new_tag').focus(); 

        $('.add_tag').click(function(e){ 
         e.preventDefault(); 
         if($('#new_tag').is(':visible')) { 
          // remove it 
          $('#new_tag').slideUp().remove(); 
         } 
         return false; 
        }); 
         // when the focus moves, automatically add the tag 
         $('#new_tag').blur(function(){ 
         // send the data to be processed 
         $('form[name="add_tag"]').submit(); 
         }); 
       }); 
    }); 
+0

你有没有可以测试的html代码片段? – Melvin 2011-06-10 21:56:54

回答

0

文本框将在取消按钮的点击操作之前失去焦点。因此,取消提交已经太晚了。解决这个问题的一种方法是稍微延迟一下提交,然后在实际提交之前检查取消标志。类似这样的东西(未经测试):

var submitCanceled=false; 

$('#new_tag').blur(function(){ 
    setTimeout(function(){ 
     // send the data to be processed 
     if(!submitCanceled){ 
     $('form[name="add_tag"]').submit(); 
     } 

     submitCanceled=false; 
    },1000); 
}); 

$('#cancel_button').click(function(){ 
    // ... 
    stubmitCanceled=true; 
    // ... 
}); 
+0

谢谢。我已经实现了基于此的东西,它使用延迟效果很好。 – musoNic80 2011-06-11 15:19:55