jquery live,单击并删除

时间:2011-06-10 21:22:39

标签: jquery

我让自己混淆了这个jQuery代码,所以我希望有人可以提供帮助! 要解释:用户单击链接,将阻止默认操作。进行AJAX调用以创建具有文本输入字段的表单,该字段被赋予焦点。在一个简单的情况下,当用户远离字段时,提交表单并在服务器端进行重定向。我正在尝试取消取消功能。我希望用户能够重新单击原始链接以删除文本输入并停止提交表单。目前,虽然删除了输入字段,但仍然提交了表单,大概是因为焦点已从中删除。

我意识到我不能使用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();
                      });
               }); 
    });

1 个答案:

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