如何在jQuery中使用ajaxSetup中的上下文变量

时间:2012-10-11 03:10:22

标签: jquery ajax

我在一个页面上有多个表单,我通过像这样的

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

在mY AjaxSetup中,我有这个

beforeSend:function(xhr, settings){

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

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

1 个答案:

答案 0 :(得分:3)

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

不确定您希望thisbeforeSend中引用什么,但将它设置为jQuery引用可能最简单......就像这样:

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

和您的上下文对象:

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

评论后更新 我知道了。这不是很优雅,但您可以使用插件的beforeSubmit回调来设置表单的全局变量(传递给该回调),然后在beforeSend回调中访问该变量。

将代码置于beforeSubmit回调中可能更好。

(这一切都假设您正在使用this ajaxForm plugin。)

更新了示例:

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

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

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