2011-06-10 188 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