2016-04-15 122 views
2

我有一個表單頁面,我打算使用Ajax進行提交。我的計劃是 1.檢查電子郵件已經存在使用Ajax 2.檢查口令一致 3.如果是的話,切換到另一個「屏幕」和 4.使用AjaxAjax回調未執行

我提交表單困惑,因爲驗證功能不運行。當密碼不匹配時,它既不切換屏幕也不警告。因此,表單也未提交。我的代碼低於

$('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函數內部調用它,但是它不會因爲依賴變量而解析,所以我不確定如何去做這件事。

UPDATE 附帶相關的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

沒有相關的HTML其難度是任何援助 – RiggsFolly

+0

什麼是'驗證!= false'? –

+0

@RiggsFolly添加了html –

回答

1

您忘記了調用'驗證'功能。 就像你的代碼似乎你只是聲明瞭這個函數而沒有執行它。

+0

其實他認爲如果你看起來更接近 – RiggsFolly

0

validate的功能不被調用。爲什麼不簡單地刪除函數定義,以便代碼是click函數的一部分?

+0

如果我解開它,我怎麼測試不相似的密碼? –

+0

你可以將它作爲一個獨立的函數移動到'click'函數之外,並將值作爲參數傳入:'function validate(pass1,pass2)' – yk11

1

你是不是調用驗證功能正確

函數調用必須有()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

這將調用'validate()'函數,假設這段代碼實際上被調用。你是說整段代碼沒被調用? – RiggsFolly