2013-04-01 18 views
8

私は、Parsley.jsを使用してフロントエンドを検証し、非同期で提出するフォームを作成しようとしています。フォームは#contactFormと呼ばれ、送信ボタンは#sendDataです。空または無効なフォームでsubmitを押すとエラーになります。無効なフォームデータから「エラー」アラートが表示されることが予想されますが、代わりにElse条件が続き、データはcontactForm.phpによって処理されます。parsley.jsを使用した非同期フォームの提出


$(document).ready(function() { 

    // submit data on click and check if valid 
    $('#sendData').click(function(e) { 
     //check if valid with parsley 
     var valid = $('#contactForm').parsley ('validate'); 
     if (valid === false) 
     { 
      e.preventDefault(); 
     } 
     else 
     { 
      $.post("contactForm.php", $("#contactForm").serialize());  
     } 
    }); 
}); 

以下の適切なソリューションを提供します。

+0

検証結果がブール値の場合、条件は 'if(!valid)'または 'if(valid === false)'でなければなりません。また、クリックハンドラにパラメータ 'e'を追加し、イベントをキャンセルするために' false'を返す代わりに 'e.preventDefault();'を実行することを検討してください。 – plalx

+0

[自分のサイト](http://parsleyjs.org/documentation.html#parsleyform)には、デフォルトの処理を上書きするために、フォームから 'data-validate =" parsley "属性を削除する必要があることも記載されています。 – plalx

+0

アドバイス@plalxありがとうございます。フォームの属性からdata-validate = "parsley"を削除し、ブール値の条件を修正しました。何らかの理由で私はまだ同じ問題を抱えています。 私を忘れてください。私はあなたのコメントを誤解し、それを解決しました。再度、感謝します。 – nobody

答えて

38

コードは次のようになります。

$(function() { 
    $('#contactForm').submit(function(e) { 
     e.preventDefault(); 
     if ($(this).parsley().isValid()) { 
      $.post("contactForm.php", $(this).serialize());  
     } 
    }); 
}); 
  • は、フォーム提出イベント、送信ボタンのないクリックをキャッチしたいです。 (フォームを送信するには、フォームを送信する他の方法があります。これは、クリックを引き起こすことはありませんが、同様に処理する必要があります)。
  • デフォルトアクションを常に防止します。フォームをAjax経由で提出するので、伝統的な方法で提出することは決してありません。
  • === falseと明示的に比較する必要はありません。 (フォームが有効な場合、パースリーは真偽値を返します。それを使用してください)
  • $(document).ready(function() { ...$(function() { ...です。
  • 中括弧を配置する一方向に整定します。 (JSの最も一般的な規約は、「非対称」です。つまり、文を開始した1行に{)です。
  • あなたのコメントは余分です。 (彼らが必要とされていないので、コードは、言うまさに言う。)

EDIT:(2.xの前)パセリの古いバージョンでは、これは何である

if ($(this).parsley('validate')) { 
    // ... 
} 
+0

この先生に感謝します! – CaffeineShots

+0

非常に有益な答え - コードとメモの両方。ありがとうございました –

+1

残念ながら、パースリー2.xではパールレイ( 'validate')は利用できません –

3

を使用します私のために働いた:

<form id="signupform" data-parsley-validate> 
    (....) 
</form> 

<script> 
$(function() { 
    $('#signupform').parsley().subscribe('parsley:form:validate', function (formInstance) { 
     formInstance.submitEvent.preventDefault(); //stops normal form submit 
     if (formInstance.isValid() == true) { // check if form valid or not 
      //code for ajax event here 
      $.post("createuser.php", $(#signupform).serialize()); 
    }}); 
}); 
</script> 

はい、それはparsleyjs.orgの例からコピーされます。しかし、それは正常に動作します!

関連する問題