Javascript:无法获得无线电值,它始终返回null

时间:2015-11-17 00:06:12

标签: javascript

我在获取单选按钮值时遇到问题。我通过stackoverflow搜索并遵循相同问题的说明,但没有帮助。如果你能提供帮助我会很感激:

以下代码中的radio_value始终返回null。



<!DOCTYPE HTML>
<HTML>
	<HEAD>
		<TITLE>Template</TITLE>
		<script>
		function payment_validation(){	
		var radio_value="";
		var radios=document.getElementsByName("payment");
		for (var i=0;i<radios.length;i++){
		if(radios[i].checked){	
		radio_value=radios[i].value;
		return radio_value;
		break;
		}
		}
		if(radio_value!=""){
		document.getElementById("payment_error").innerHTML="";
		return true;	
		}
		else{
        document.getElementById("payment_error").innerHTML="Please select radio";
		return false;	
		}
		}	
		</script>
	</HEAD>
	
	<BODY>	
		<p>
		Payment Options: 
        <input type="radio" name="payment" id="CC" value="">CreditCard 
        <input type="radio" name="payment" id="DC" value="">DebitCard 
        <input type="radio" name="payment" id="PP" value="">Paypal
        <span style=color:red id= payment_error></span>	
		</p>
   		
		<p>
		<input type="button" id="submit_id" value="   SUBMIT   " onclick="payment_validation()">
		</p>
	</BODY>
</HTML>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

使用.checked而不是.value。这应该有帮助,使其不是NULL。所以它会是

 radio_value=radios[i].checked;

答案 1 :(得分:1)

一些事情:

  • 您应该尝试使用标签缩进格式化JS,以便更容易阅读。
  • 你真的只需要你的payment_validation函数返回true或false;所以删除行return radio_value,而不只是break
  • 最佳做法是用逗号分隔顶部的变量声明,而不是多次声明var
  • 您有一个未公开的<p>标记。
  • 没有payment_error id的元素,因此代码会按原样生成错误。
  • 您的<span>标记格式错误;它缺少属性值周围的引号,并且在payment_error之前有一个空格。

总而言之,现在:

HTML:

<p>
  Payment Options:
  <input type="radio" name="payment" id="CC" value="CreditCard">CreditCard
  <input type="radio" name="payment" id="DC" value="DebitCard">DebitCard
  <input type="radio" name="payment" id="PP" value="Paypal">Paypal
</p>

<p>
  <input type="button" id="submit_id" value="   SUBMIT   " onclick="payment_validation()">
</p>

<p style="color: red;" id="payment_error"></p>

JS:

function payment_validation() {
    var radio_value = "",
        radios = document.getElementsByName("payment");

    for (var i = 0; i < radios.length; i++) {
        if (radios[i].checked) {
            radio_value = radios[i].value;
            break;
        }
    }

    if (radio_value != "") {
        document.getElementById("payment_error").innerHTML = "";
        return true;
    } else {
        document.getElementById("payment_error").innerHTML = "Please select radio";
        return false;
    }
}

Codepen:http://codepen.io/anon/pen/avXGeK