2011-06-14 60 views
0

我是网络编程的新手,我想要验证以下表单。为什么下面的javascript没有被执行?

<form name="feature_request_view" action="FeatureRequestView.php" method="post" onsubmit="return validateAllFields()"> 
<p id="errorMsg" style="color:red">&nbsp;</p> 

<div class="noboder"> 
<label for="approval">* Approve the feature request?:</label> 
<input type="radio" name="approval[]" id="approval" value="1" /> Yes 
<input type="radio" name="approval[]" id="approval" value="0" /> No 
* 
</div> 

<div class="button-style"> 
<input type="submit" value="Submit" /> 
</div> 

</form> 

JavaScript代码如下:

<script type="text/javascript" src="../validation.js"></script> 
<script type="text/javascript"> 
function validateAllFields() 
{ 
var approval = document.getElementsByName("approval"); 
var errors = document.getElementById("errorMsg"); 
errors.innerHTML = ""; 

if(checked(approval, errors, "Please choose an option to approve/disapprove the   feature request.")) 
{ 
    window.alert("got in the if block"); 
    errors.innerHTML = "Your decision has been submitted."; 
    return true;  
} 
return false; 
} 
</script> 

而我使用的检查功能是:

function checked(element, error, msg) {   
    var boxchecked = false; 
    for (i = 0; i < element.length; i++) { 
     if (element[i].checked) { 
      boxchecked = true; 
     } 
    } 


    if (boxchecked) { 
     return true; 
    } 
    else { 
     error.innerHTML = msg; 
     return false; 
    } 
} 

我的问题是,代码永远不会被执行的JavaScript,因此即使单选按钮没有被填充也会传递它,并开始执行一些我用来填充表格的php。请帮忙!提前致谢。

+1

语法错误?任何显示在控制台中的东西? – 2011-06-14 18:01:40

+2

'name ='approval []“'属性应该是'name =”approval“'以与您的javascript代码相匹配。 – Genzer 2011-06-14 18:03:55

+0

...一致的缩进使得代码更容易遵循。还要明确说明*什么*没有执行。这将导致答案。 – 2011-06-14 18:04:14

回答

1

我可以想象你的第一个问题是,你正在使用getElementsByName,而不是通过在正确名称,例如您已将您的复选框命名为approval[],而不是approval

我建议你也给他们唯一的ID,如:

<input type="radio" name="approval" id="approvalYes" value="1" /> 
<input type="radio" name="approval" id="approvalNo" value="0" /> 

ID是由客户端,wheras回传给服务器的数据使用使用name属性的值来表示的name部分name/value对每个表单数据项。

你也可以达到你想要的东西用jQuery,通过简单的操作:

var el = $('input[name="approval"]'); 
if (el.is(":checked")) { 
    // One of the radio buttons has been checked. 
} 
+0

Downvoted是因为? – 2011-06-14 18:10:41

+0

我删除了名称属性中的括号,但它仍然只是绕过JS – KyleL 2011-06-14 18:12:22

+0

我没有downvote – KyleL 2011-06-14 18:16:11