Javascript jQuery:如何将.live()与.ajaxForm()链接?
我有一个通过XHR拉入的表单,所以在最初呈现DOM时它还没有准备好。目前我使用的是:Javascript jQuery:如何将.live()与.ajaxForm()链接?,javascript,jquery,Javascript,Jquery,我有一个通过XHR拉入的表单,所以在最初呈现DOM时它还没有准备好。目前我使用的是: jQuery("[name='myform']").ajaxForm({ /* code here */ }); 它在一个独立的应用程序上运行良好。我将其嵌入的应用程序非常庞大,我需要能够在myform可用于DOM之前将ajaxForm绑定到myform。我是否可以在这里合并.live(),以便jQuery在通过XHR引入时监视它 **编辑** 下面是正在执行的实际代码。没有javascript错误。它只是执
jQuery("[name='myform']").ajaxForm({ /* code here */ });
它在一个独立的应用程序上运行良好。我将其嵌入的应用程序非常庞大,我需要能够在myform可用于DOM之前将ajaxForm绑定到myform。我是否可以在这里合并.live(),以便jQuery在通过XHR引入时监视它
**编辑**
下面是正在执行的实际代码。没有javascript错误。它只是执行一个完整的页面提交,而不是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();
});
jQuery(“[name='clip\u form2']”)。live('submit',函数(e){
$(此).ajaxSubmit({
目标:“#表格(引用)部分(突出部分)”,
beforeSerialize:函数(窗体、选项){
警报(“在beforeSerialize中…”);
如果(验证时间文本突出显示()){
如果($tabchange){
差异(形式[0]);
jQuery('form[name=clip\u form2]input[type=submit]').attr('disabled','disabled').val(“”);
返回true;
}
否则{
返回false;
}
}
返回false;
},
成功:函数(){
jQuery(“#form#quotes(form#u highlights(u part”).fadeIn('slow');
},
完成:函数(){
jQuery(“向导”).expose().close();
}
});
$tabChanged=false;
添加更改侦听器(“form[name=clip\u form2]”;
Tabs.validateCancel($(“按钮[name=Cancel],“表单[name=clip\u form2]”);
美元(“#clip_quote”).NobleCount(“#quote_quote”);
$(“#clip”u quote2”).NobleCount(“#quote2”u count”);
$(“#clip#u attributes”).NobleCount(“#attributes_count”);
如果(){
jQuery('form[name=clip\u form2]input').attr(“disabled”,true);
jQuery('form[name=clip\u form2]textarea').attr(“disabled”,true);
}
e、 预防默认值();
});
像这样的东西应该可以做到:
jQuery("[name='myform']").live('submit', function(e) {
$(this).ajaxSubmit(/* code here */);
e.preventDefault();
});
ajaxSubmit()
是魔法发生的地方(asajaxForm()
只是绑定了一个提交处理程序),这里我们只是在监听submit
事件,然后调用ajaxSubmit()
。ajaxSubmit()而不是ajaxForm()的原因是什么?@randombits-我试图在上面详细说明,您可以在这里看到,ajaxForm()
做得很少:它只是一个在下面调用ajaxSubmit()
的绑定机制。您能不能改用.delegate()?可能会获得性能优势。@RyanP13-可能,这取决于您是否知道要绑定到更本地的上下文,如果您不能更改jQuery(“[name='myform']”)。live('submit',function(e){
tojQuery(“body”)。委托('name='myform'],'submit',function(e){
@Nick-同意这可能更容易坚持。live()如果你不知道上下文的话。我对当前的应用程序做了太多的更改,所以我恢复到了.live(),以防止任何进一步的重构。遗憾的是.delegate()太酷了!