1

フォームを検証するために validationEngine スクリプトを使用しています。私はそれを初期化します:

$("#formid").validationEngine();

送信ボタンからフォームを実際に送信することはありません。onclick関数を呼び出すイベントでアンカー要素を使用しsaveElement()ます。この関数では、次のように呼び出します。

$("#formid").validationEngine('validate');

これは問題なく動作します。

その直後に、""必要なフィールドがエラーを表示し始めるフィールド (たとえば、入力フィールドの内容を ) にリセットしました。

これらのエラーの発生を防ぐために、フォーム要素から validationEngine を削除したいと思います。ただ、なかなか取り出せません。以下のものを含むさまざまなオプションを試しましたが、どれも機能しませんでした。

$('#formid').validationEngine('hideAll'); // To hide the error messages
$('#formid').validationEngine('detach');  // To remove the validationEngine

validationEngineを削除する方法を提案している人はいますか?

回避策

バインドを解除する方法がないように見えます。github プロジェクトに問題を追加しました。たぶん、アンバインド メソッドを実装するでしょう: https://github.com/posabsolute/jQuery-Validation-Engine/issues/287

回避策として、次の解決策を思いつきました。次のいずれかを実行できます。

  • jQuery.clone() を使用してイベントなしでフォームをコピーし、元のフォームを削除して、validationEngine をフォームに再度追加します。
  • フォーム要素の検証クラスを削除し、それらを配列に格納して、フォームをリセットした後に再度挿入します

まだ開いている

より良い解決策または回避策があるかもしれません。あなたが知っているなら、私に知らせてください。

4

2 に答える 2

2

この問題はまだ修正されていません。フォームを検証せずにポストバック イベントを発生させるには、既存のアプリで検証を無効にする必要がありました。次のような正規表現を使用して検証クラスを削除することで、成功しました。

// Work around
$('[class*="validate"]').each(function () {
      var _this = $(this);
      _this.attr("class", _this.attr("class").replace(/validate\[.*]+\s?/, ""));
});
于 2014-08-25T15:34:28.920 に答える
1

あなたは本当に物事を過剰に設計していると思います。これはあなたが期待した答えではないかもしれませんが、これがあなたがすべきだと私が思うことです:

まず、送信するアンカー要素で、次のようにします。

$('#anchorElement').click(function() {
    $('#formid').submit()
})

次に、次のようにして、送信後にフォームを削除できます。

$('#formid').submit(function() {
    // Do your submitting stuff, like validating.
    $(this).remove()
    // Or use $(this).hide() if you simply want to hide it.
})

しかし、私はアンカー要素を使用する方法を支持しません。うまく劣化させることは、ほとんどすべてのWebサイトにとって必須です。

問題は、ユーザーがJavaScriptを有効にしない場合、フォームが送信されないことです。

ところで、validationengineの「バインド解除」はないようです。解決策については、こちらをご覧ください:フォームからJQueryvalidationEngineを削除します

于 2012-02-23T08:30:00.567 に答える