1

私はvalidationEngineスクリプトを使用してフォームを検証しています。私はそれを以下のように起動します:jQueryは実行時にvalidationEngineを削除します

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

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

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

だけで正常に動作しています。

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

これらのエラーが発生しないように、私はフォームエレメントからvalidationEngineを削除したいと思います。しかし、私はそれを削除することはできません。私は以下のものを含む様々なオプションを試しましたが、どれも働いていませんでした。

どのように私はvalidationEngineを削除できますか?

回避策

何のアンバインド方法がないように、それは本当に縫い目。私はgithubプロジェクトに問題を追加しました。私は以下のソリューションを思いついた解決策として https://github.com/posabsolute/jQuery-Validation-Engine/issues/287

:おそらく彼らは、アンバインドメソッドを実装します あなたがいずれかの可能性:

  • 利用jQuery.clone()イベントせずにフォームをコピーするには、元のフォームを削除し、フォームにvalidationEngineを追加し、再び
  • は、フォーム要素の検証クラスを削除し、配列に格納し、フォーム
をリセットした後、それらを再び挿入210

まだ開いています

もっと良い解決策または回避策がありますか?あなたが1つを知っているなら、私に知らせてください。

答えて

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. 
}) 

しかし、私はアンカー要素を使用する方法を推奨しません。十分に劣化することは、ほぼすべてのウェブサイトにとって必須です。

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

Btwでは、validationengineの「バインド解除」がないようです。ソリューションについてはこちらを参照してください。Remove JQuery validationEngine from form

+0

残念ながら、これは私のためには動作しません。私は本当にフォームを提出するのではなく、サーバーにajaxリクエストを介してデータを送信します。 すべての要素を編集するために同じフォームを使用するため、フォームを削除できません。そして私がそれを隠すかslideUp(私が使用する)をエラーにしても表示されます。それらは空の背景の上に表示されます。 –

+0

私はあなたの使用を支持しないでしょう(どちらも私の解決策ではありません)。うまく劣化しているjavascriptは、ほぼすべてのウェブサイトにとって必須です。 –

+0

この目的のためにサブミット要素の代わりにアンカー要素を使用する違いは何ですか?あなたがAJAXリクエストを通してあなたのデータを送るとき、あなたはvalidationEngineを取り除くためにform要素を破壊しなければならないと信じられません。別の方法はありませんか? –

2

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

// Work around 
$('[class*="validate"]').each(function() { 
     var _this = $(this); 
     _this.attr("class", _this.attr("class").replace(/validate\[.*]+\s?/, "")); 
}); 
関連する問題