为什么jQuery .live()不能在这里使用我的.ajaxForm()调用?

时间:2010-10-29 19:09:21

标签: javascript jquery

我有一些代码如下:

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();
    }
  });
 }); 

live()绑定似乎工作正常,但是ajaxForm根本不起作用。如果我这样做:

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

看起来效果很好。唯一的问题是,当响应从服务器返回时,javascript处理程序没有正确地附加到DOM,因此使用live()。无论哪种方式,beforeSerialize永远不会以我正在处理我的live()处理程序的方式调用,所以我没有ajaxForm,而是提交完整页面。

清理它的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

我从未使用ajaxForm插件,但查看其documentation,看起来只需设置表单就可以调用ajaxForm,它不会实际上提交表单。因此,当调用绑定到表单的submit函数的函数时,表单已经被提交,因此通过ajaxForm将表单设置为AJAX表单为时已晚。

如果我理解正确,页面加载时页面上不存在myform表单;相反,它在某些时候通过AJAX调用插入到页面中。该AJAX调用的success回调也是您应该调用ajaxForm的地方,以便提前准备用户提交表单的时间。 e.g:

$.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();
        }
    });
});