目标:修复下面的代码,并了解为什么专注于单选按钮不能像关注文本输入框那样工作。
问题:为什么这不起作用:
function isValidRadio(elem, helperMsg) {
var valid = false;
for (var i = 0; i < elem.length; i++) {
if (elem[i].checked) {
return true;
}
}
alert(notice);
setTimeout("focusElement('" + elem.form.name + "', '" + elem.name + "')", 0);
return false;
}
......当这样做时:
function isValidText(elem, notice) {
var str = elem.value;
var re = /.+/;
if(!str.match(re)) {
alert(notice);
setTimeout("focusElement('" + elem.form.name + "', '" + elem.name + "')", 0);
return false;
} else {
return true;
}
}
示例代码:
function focusElement(formName, elemName) {
var elem = document.forms[formName].elements[elemName];
elem.focus();
elem.select();
}
function validateForm(form) {
if (isValidText(form.phone, "Fail.")) {
if (isValidRadio(form.yesNo, "Fail.")) {
return true;
}
return false;
}
}
<form id='myForm' action='/formPage/collectinfo/' method='post' accept-charset='UTF-8' name="myForm">
<input name="phone" type="text" maxlength="14" size="14" />
<input type="radio" name="yesNo" value="Yes"> Yes <input type="radio" name="yesNo" value="No" > No
<input type="submit" value=" Submit " name="Submit" onclick="return validateForm(myForm)" />
详细信息:我使用的是php / javascript / html,到目前为止,我只是在Chrome中测试这个部分。表单工作正常,验证工作直到它命中isValidRadio。警报运行,但随后javascript中断。代码修复会很棒,但我不介意“终身钓鱼......”
答案 0 :(得分:2)
好吧,我找到了解决方案,AlienWebguy让我在正确的轨道上思考数组。我只需指定要关注哪个单选按钮而不是哪个单元。这是工作代码:
// Validate that the user has checked one of the radio buttons
function isValidRadio(radio, helperMsg) {
var valid = false;
for (var i = 0; i < radio.length; i++) {
if (radio[i].checked) {
return true;
}
}
alert(helperMsg);
radio[0].focus();
return false;
}
致电:isValidRadio(form.yesNo, "Error.")
感谢您的帮助。