2016-04-15 9 views
2

Ajaxを使用して送信するフォームページがあります。電子メールは、すでにパスワードが 3と一致した場合にそれがない場合は、別の「画面」に切り替えて 4.私はアヤックスAjaxコールバックが実行されていません

を使用してフォームを送信アヤックス 2.チェックを使用して存在する場合、私の計画は1 にチェックしていますvalidate関数が実行されないので混乱します。パスワードが一致していない場合でも、アラートではなく画面を切り替えることもありません。したがって、フォームは提出されません。私のコードは、私は、彼らが一致しない場合はfalseがその時点から機能を終了するので、イベントリスナーの残りの部分は実行されません、と思ってい

$('form input:last-child').click(function(e){ 
    e.preventDefault(); 
    var allFields = e.target.parentNode; 

    function validate() { 
     if (allFields.elements[3].value !== allFields.elements[4].value) { 
      return false; // If they don't match, return false 
     } else { 
      $('#form-div form').css('left', '-70%'); 
      $('#confirm p').css('margin-left', '-12%'); // else switch screens 
     } 
    } 
    if (validate != false) { 
     $('#hidden').load("server_script.php"); // `hidden` is a hidden div somewhere on the page 
    } else 
     alert ("Passwords do not match"); 
}); 

下回ります。だから私は、イベントリスナーの外でvalidate関数のインスタンスを作成し、click関数の中で呼び出そうとしましたが、従属変数のために解析しないので、これについてどうやって行くのか分かりません。

更新 関連付けられたHTMLが添付されています。 (ボーナス:正規表現パターンは、2以上の文字と一致しない)

<div id=form-div> 
<form method=POST action="" > 
First Name: <br> <input type=text name=first_name pattern="[a-z]{2,}" required /> <br> <br> 
Last Name: <br> <input type=text name=last_name pattern="[a-z]{2,}" required /> <br> <br> 
Email: <span id=emailReport></span> <br> <input type=email name=email id=email required /> <br> <br> 
Password: <br> <input type=password name=password required pattern=".{6,}" title="Password must be six or more characters" /> <br> <br> 
Confirm password: <br> <input type=password name=password required /> <br> <br> 
<input type=hidden name=sign_up_date /> 
<input type=submit value='sign up' /> 
</form> 

<div id=confirm> <p>Some text</p> </div> 
</div> 

</div> 
+0

を持っている必要があります検証関数を呼び出すされていない 'は何ですかどのような援助 – RiggsFolly

+0

であることがその困難validate!= false'? –

+0

@RiggsFollyがhtmlを追加しました –

答えて

1

「確認」機能を呼び出すことを忘れました。 あなたのコードでは、実行しないで関数を宣言したようです。

+0

実際には、少し近づけば彼はそれを呼んでいると思った – RiggsFolly

0

validate関数が呼び出されていません。コードがclick関数の一部になるように、単に関数定義を削除しないのはなぜですか?

+0

これをアンラップすれば、どうやって似たようなパスワードをテストできますか? –

+0

'click'関数の外にスタンドアロン関数として移動し、パラメータとして比較する値を渡すことができます:' function validate(pass1、pass2) ' – yk11

1

あなたは適切

関数呼び出しは、関連するHTMLなければ()

validate validate()すなわちなく
$('form input:last-child').click(function(e){ 
    e.preventDefault(); 
    var allFields = e.target.parentNode; 

    function validate() { 
     if (allFields.elements[3].value !== allFields.elements[4].value) { 
      return false; // If they don't match, return false 
     } else { 
      $('#form-div form').css('left', '-70%'); 
      $('#confirm p').css('margin-left', '-12%'); // else switch screens 
     } 
    } 

    //if (validate != false) { 
    if (validate() != false) { 
     $('#hidden').load("server_script.php"); // `hidden` is a hidden div somewhere on the page 
    } else 
     alert ("Passwords do not match"); 
}); 
+0

私はかっこを追加しましたが、スクリプトには何もロードされません。元の 'validate'が実行されていなかった理由は、別の行で呼び出さなかったからです。受け入れられた答えを確認してください –

+0

これは、jsコードのこのセクション全体が実際に呼び出されたと仮定して 'validate()'関数を呼び出します。あなたはこのコードセクション全体が呼び出されていないと言っていますか? – RiggsFolly

関連する問題