0

1 つのページに複数のフォームがあり、このような 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で何を参照したいのか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関数で行うつもりだったことは何でもやったほうがよいと思います。beforeSubmit

于 2012-10-11T03:18:49.160 に答える