1

JQueryフォームプラグインJQuery検証プラグイン、jqTransformプラグインを使用しています。

何かを追加または編集するために表示する非表示のフォームがあります。編集または追加アクションは、次の関数呼び出しをトリガーします。

function activateAddForm(formId,callback) {
    $('#'+formId).jqTransform().validate({
            submitHandler: function(form) {
                $(form).ajaxSubmit( {
                    dataType: "json", 
                    success: function(json) {
                        callback(json);
                    }
                });                 
            }
        }); 
}

異なるパラメーターを使用した各呼び出し。追加のために、私はそれをと呼びます

activateAddForm('add-new-form',addToy);

編集のために、私はそれを呼びます

activateAddForm('add-new-form',editToy);

これが起こることです:

  • ページをリロードします。
  • 1つのおもちゃを編集します。
  • フォームを送信します。
  • editToy関数が呼び出されます。
  • 何かを追加してみてください。
  • 関数activateAddFormは、コールバックとしてaddToyを使用して呼び出されますが、フォームが送信されると、代わりにeditToy関数が呼び出されます。

リロード後に最初に行うのがおもちゃの追加である場合。次に、addToy関数が常に呼び出されます。

追加してみました:

function activateAddForm(formId,callback) {
    $('#'+formId).ajaxFormUnbind();
    ...
}

また

function activateAddForm(formId,callback) {
    $('#'+formId).resetForm();
    ...
}

しかし、それは機能していません。私に何ができるか考えてみませんか?

回避策の試行

行を追加するというActivaの提案:

$.removeData($('#'+formId)[0],'validator');

function activateAddForm(formId,callback) {
$('#'+formId).jqTransform();
$.removeData($('#'+formId)[0],'validator');
$('#'+formId).validate({
        submitHandler: function(form) {
            $(form).ajaxSubmit( {
                dataType: "json", 
                success: function(json) {
                    callback(json);
                }
            });                 
        }
    }); 
}

次の原因:

  • ページをリロードします。
    • 1つのおもちゃを編集します。
    • フォームを送信します。
    • editToy関数が呼び出されます。
    • 何かを追加してみてください。
    • フォームeditToy関数が呼び出され、続いて関数を追加するための呼び出しが行われます。

上記の修正は機能しませんが、正しい方向にあるようです。

他にアイデアはありますか?

4

4 に答える 4

2

検証関数のパラメーターに入れるのではなく、バリデーターの submitHandler を変更するだけの方がはるかに簡単だと思います。

$('#form').validate().settings.submitHandler = function () {
   // your function goes here.
}
$('#form').submit();
于 2011-01-18T08:30:48.093 に答える
1
$('#comment').validate({
      rules:{
               comments:{required:true}
         },
    messages:{
               comments:{required:'Please enter the comment' }
          },
           submitHandler: function(form) { //asynchronusly post the form data

                        var url=MAIN_SITE_URL+'rating/getrate/';
                        var comments=$('#comments').val(); 
                        url+='rating/comment/'+comments;
                        $.post(url,$('#rating').serialize(),
                                             function(response){alert(response); }

           }
     });
于 2010-09-27T06:28:30.657 に答える
1

バリデータ プラグインのソース コードを確認したところ、validate() 関数を呼び出すと、その後の validate() の呼び出しは効果がないようです。

回避策は、validate() を呼び出す前に次を呼び出すことです。

$.removeData($('#'+formId)[0],'validator');

編集:

コードをもう一度確認しましたが、戦略を変更する必要があると思います:-)

function updateAddForm(formId,callback) {
$('#' + formId).data("successCallback",callback);
}

function initAddForm(formId) {
$('#'+formId).jqTransform()..validate({
        submitHandler: function(form) {
                $(form).ajaxSubmit( {
                        dataType: "json", 
                success: function(json) {
                        $('#'+formId).data("successCallback")(json);
                }
                        });                     
        }
    }); 
}

最初に、次のように呼び出します。

initAddForm('add-new-form');

コールバックを設定するには、次を呼び出します。

updateAddForm('add-new-form', addToy);

また

updateAddForm('add-new-form', editToy);

それはおそらくトリックを行うでしょう。

于 2009-06-07T17:39:54.527 に答える
0

あなたの質問に答えるのに十分な情報がありません。Firefoxで作業している場合は、firebugプラグインをインストールして、フォーム要素を調べてみてください。

ここでの説明から、おそらく同じページで同じIDを持つ2つの異なるフォーム要素を使用していることがわかります。私が最初にすることは、次のような一意のID要素によってフォームを区別することです:edit-form add-form

誰かがあなたのためにより良い答えを持ってくれることを願っています。

于 2009-06-05T12:59:40.847 に答える