2013-03-04 74 views
1

以下是我爲ajax驗證所寫的代碼。我還沒有創建表單的提交按鈕。問題是,我必須禁用提交按鈕,直到所有字段都填充了適當的信息並以ajax方式驗證。這只是一個包含兩個字段的示例。我有超過20個這樣的領域,請幫助我做到這一點。謝謝。使用ajax驗證時禁用提交按鈕

形式:

<p> 
<label for="cname">Name</label> 
<em>*</em><input id="cname" name="name" size="50" minlength="2"onkeyup="checkname()"/> 
<span id="target1"></span></p> 
<p> 
<label for="fat">Father's Name</label> 
<em>*</em><input id="cfat" name="father" size="50" onkeyup="checkfather()" /> 
<span id="target2"></span></p> 

使用Javascript(AJAX):

var ajax = create_ajax_object(); 
function checkname(){ 
    if(ajax){ 
     ajax.onreadystatechange = function(){ 
    if(ajax.readyState == 4 && ajax.status == 200){ 
     document.getElementById("target1").innerHTML = ajax.responseText; 
    } 
     } 
     ajax.open("POST", "ajval.php", true); 
    var values = "name=" + encodeURIComponent(document.commentform.name.value); 
    values = values + "&action=" + encodeURIComponent("check1"); 
    ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
    ajax.send(values); 
    } 
    else{ 
     alert("Your browser doesnt support AJAX!");    
    } 
} 
function checkfather(){ 
    if(ajax){ 
     ajax.onreadystatechange = function(){ 
    if(ajax.readyState == 4 && ajax.status == 200){ 
     document.getElementById("target2").innerHTML = ajax.responseText; 
    } 
     } 
     ajax.open("POST", "ajval.php", true); 
    var values = "father=" + encodeURIComponent(document.commentform.father.value); 
    values = values + "&action=" + encodeURIComponent("check2"); 
    ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
    ajax.send(values); 
    } 
    else{ 
     alert("Your browser doesnt support AJAX!");    
    } 
} 

PHP:

<?php 
$action = $_POST["action"]; 
switch($action) 
{ 
case "check1": 
    $name=$_POST["name"]; 
    if($name!="") 
    echo '<img src="green-tick.png" height="20" width="20"/>'; 
    else 
    echo'<span style="color:red;">Cannot be left blank</span>'; 
    break; 
case "check2": 
    $father=$_POST["father"]; 
    if($father!="") 
    echo'<img src="green-tick.png" height="20" width="20"/>'; 
    else 
    echo '<span style="color:red;">Cannot be left blank</span>'; 
    break; 
?> 
+0

是PHP對這兩個字段的完整驗證嗎?如果是這樣,絕對沒有理由使用AJAX進行客戶端驗證; JavaScript不僅能夠檢查字符串是否爲空。 – 2013-03-04 09:45:06

+0

您好@AnthonyGrist我使用帶有許多字段的窗體的標籤視圖,所以點擊提交按鈕後驗證會令人噁心。 – MEP 2013-03-04 09:49:02

+0

點擊提交按鈕後,我沒有說任何關於驗證的內容。我正在討論如何單獨驗證您的輸入,並使用您當前擁有的相同事件處理程序,但如果不需要,則不會使用AJAX進行驗證。如果唯一的驗證是輸入的值不能是空字符串,那麼你不需要使用AJAX。 – 2013-03-04 09:51:27

回答

1

您需要跟蹤您的有效字段。 對於每個驗證運行一個formIsValid方法來檢查整個表單是否有效並且可以啓用提交按鈕。

我會建議從實際的ajax請求中單獨運行,因爲在使用諸如複製粘貼或自動填充之類的操作時,更改事件不能可靠運行。

由於ajax驗證仍然需要客戶端組件,因此可能會被愚弄,並且可能會發送無效的表單。因此,無論如何您都無法在提交後驗證完整的表單。

// you could have an object with validation expressions for each field 
var fields = { 
    name: /.+/, 
    father: /.+/ 
} 

// then once on load and after each successful ajax check run this method 
function formIsValid() { 
    var valid = true; 

    for (var field in form.elements) { 
     valid = fields[field.name].test(field.vlaue); 
     if (!valid) { 
      break; 
     } 
    } 

    if all fields are valid the submit button will be enabled 
    document.getElementById("submit").disabled = !valid; 
} 

按鈕的html。

<!-- the disabled value is just for backwards compatibility --> 
<input type="submit" id="submit" disabled="disabled" value="Send" /> 
0

你的JavaScript驗證需要返回上提交虛假的。在HTML中,一個ID聲明的形式,像這樣:

<form method="POST" action="confirm.php" id="theform"> 

你可以做你的AJAX驗證每場像往常一樣的onkeyup(),並設置一個布爾值真/假取決於它是否有效或不。

而在JavaScript中,即時通訊使用jQuery,您執行以下操作:

$('#theform').submit(function() { 
    valid = true; 
    if() // check validation for 1st field 
    valid == false; 
    if() // check validation for 2st field 
    valid == false; 

    return valid; 
} 

如果該函數返回false,表單不會提交。

+0

這並沒有真正解決這個問題,因爲他在問如何對單個元素進行AJAX驗證。 – 2013-03-04 09:49:21

+0

@AnthonyGrist他想禁用表單提交。這是我如何阻止表單提交,直到我所有的驗證完成。 – Husman 2013-03-04 09:51:49