0

我在一个页面上有多个表单,我通过 Ajaxform 插件提交它们,就像这样

<td>  <form> form1 </form> </td>
<td>  <form> form2 </form>  </td>

var options = {
            target:        '.ajaxMessage',  
            dataType: 'json',  // pre-submit callback 
            success:     function(data, statusText, xhr, form){ myResponse(data,form)},
            context: { element: this},

            cache: false,
            delegation: true,
            type: 'POST'   }; 

            $(".rform").ajaxForm(options); 

在我的 AjaxSetup 中,我有这个

beforeSend:function(xhr, settings){

        $this = settings.context.element;       
        alert($this);

但它不起作用,警报说窗口对象

4

1 回答 1

3

当您创建选项时,“this”指的是窗口。

不确定您要this在 中引用什么beforeSend,但将其设置为 jQuery 引用可能是最简单的......就像这样:

<form id="form1">...</form>
<form id="form2">...</form>

对于您的上下文对象:

context: { element: $('#form2') },

我看到评论后更新。这并不优雅,但您可以使用插件的beforeSubmit回调为表单设置一个全局变量(将其传递给该回调),然后在您的beforeSend回调中访问它。

将代码放在beforeSubmit回调中甚至可能会更好。

(这一切都假设您正在使用这个 ajaxForm 插件。)

更新示例:

var options = {
  ...
  beforeSubmit: function(arr, $form, options) {
     // save the form somewhere we can get it later:
     $.MyActiveForm = $form;
  }

现在在您的 onSend 功能中,您可以访问$.MyActiveForm

onSend但是,我仍然认为你最好只做你在函数中要做的任何事情, in beforeSubmit,除非你需要在那个特定点进行干预。

于 2012-10-11T03:18:49.160 回答