2010-10-29 125 views
0

我有一些代碼,如下所示:爲什麼jQuery .live()不能在我的.ajaxForm()調用中使用?

jQuery("[name='myform']").live('submit', function() { 
    $(this).ajaxForm({ 
    target: '#someform', 
    beforeSerialize: function(form, options) { 
     alert("BeforeSerialize happening."); 
     jQuery('form[name=myform] input[type=submit]').attr('disabled', 'disabled').attr("value", "<%= t('labels.please_wait') %>"); 
      return true; 
     } 
     else { 
      return false; 
     } 
     } 
     return false; 
    }, 

    success: function() { 
     jQuery('#form_quotes_highlights_part').fadeIn('slow'); 
    }, 

    complete: function() { 
     jQuery("#wizard").expose().close(); 
    } 
    }); 
}); 

活()結合似乎工作得很好,但是給ajaxForm是不工作的。如果我這樣做:

$(document).ready(function() { 
     /* ajax form stuff here */ 
}); 

它似乎工作得很好。唯一的問題是,當響應從服務器返回時,JavaScript處理程序沒有正確地將自己附加到DOM,因此使用live()。無論哪種方式,beforeSerialize從來不會以我當前正在處理我的live()處理程序的方式調用,所以不是使用ajaxForm,而是使用整頁提交。

什麼是最好的清理方法?

+0

有一些代碼丟失。你有一個'else',但沒有'if'。 – Guffa 2010-10-29 19:21:52

回答

1

我從來沒有使用過ajaxForm插件,但看着它documentation,它看起來像調用ajaxForm簡單設置形式,它實際上並沒有提交形式。所以當你的函數被綁定到表單的提交函數被調用時,表單已經被提交,因此通過ajaxForm將表單設置爲AJAX形式爲時已晚。

如果我理解正確,頁面加載時頁面上不存在myform表單;相反,它在某個時候被AJAX調用插入到頁面中。該AJAX調用的回調函數success是您應該調用ajaxForm的地方,以便在用戶提交時提前準備好表單。例如:

$.get('/get_my_form', function(data) { 
    $('form[name="myform"]').html(data).ajaxForm({ 
     target: '#someform', 
     beforeSerialize: function(form, options) { 
      $('form[name=myform] input[type=submit]').attr('disabled', 'disabled').attr("value", "<%= t('labels.please_wait') %>"); 
      return false; 
     }, 
     success: function() { 
      jQuery('#form_quotes_highlights_part').fadeIn('slow'); 
     }, 
     complete: function() { 
      jQuery("#wizard").expose().close(); 
     } 
    }); 
}); 
相關問題