2010-10-26 3 views
0

J'ai un formulaire que j'utilise via XHR, donc il n'est pas prêt quand le DOM est rendu initialement. Actuellement, j'utilise quelque chose comme:jQuery: Comment chaîner .live() avec .ajaxForm()?

jQuery("[name='myform']").ajaxForm({ /* code here */ }); 

et il fonctionne très bien sur une application autonome. L'application dans laquelle je l'intègre est énorme, et je dois pouvoir lier ajaxForm à myform avant que myform soit disponible pour le DOM. Y at-il de toute façon je peux combiner .live() ici afin d'avoir jQuery regarder quand il est introduit via XHR?

** EDIT **

est ici le code réel qui est en cours d'exécution. pas d'erreurs javascript. Il ne fait que soumettre une page complète au lieu d'une mise à jour XHR.

jQuery("[name='clip_form2']").live('submit', function(e) { 
     $(this).ajaxSubmit({ 
     target: '#form_quotes_highlights_part', 

     beforeSerialize: function(form, options) { 
      alert("In beforeSerialize..."); 
      if (validate_time_text_highlights()) { 
      if ($tabChanged) { 
       diff(form[0]); 
       jQuery('form[name=clip_form2] input[type=submit]').attr('disabled', 'disabled').val("<%= 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(); 
     } 
     }); 
     $tabChanged = false; 

     add_change_listener("form[name=clip_form2]"); 

     Tabs.validateCancel($("button[name=Cancel]", "form[name=clip_form2]")); 

     $("#clip_quote").NobleCount('#quote_count'); 
     $("#clip_quote2").NobleCount('#quote2_count'); 
     $("#clip_attribution").NobleCount('#attribution_count'); 

     if (<%= is_defined?(@permitted_clip_read_only) && @permitted_clip_read_only %>) { 
     jQuery('form[name=clip_form2] input').attr("disabled", true); 
     jQuery('form[name=clip_form2] textarea').attr("disabled", true); 
     } 
     e.preventDefault(); 
    }); 

Répondre

1

Quelque chose comme ça devrait faire l'affaire:

jQuery("[name='myform']").live('submit', function(e) { 
    $(this).ajaxSubmit(/* code here */); 
    e.preventDefault(); 
}); 

ajaxSubmit() est où la magie se produit (alors que ajaxForm() se fixe juste un gestionnaire soumettre), ici, nous sommes en train d'écouter l'événement et submit en appelant le ajaxSubmit() alors.

+0

Une raison pour ajaxSubmit() au lieu de ajaxForm()? – randombits

+0

@randombits - J'ai essayé d'élaborer sur ceci ci-dessus, vous pouvez voir ici que 'ajaxForm()' est très littke: http://github.com/malsup/form/blob/master/jquery.form.js#L444 c'est juste un mécanisme de liaison qui appelle 'ajaxSubmit()' en dessous. –

+0

Ne pourriez-vous pas utiliser .delegate à la place()? Peut obtenir des avantages de performance. – RyanP13