我已经看到了this的问题,但无论我怎么做,它都不适合我。
我的功能是:
function validatePreviousChecked(parent, child) {
found = false;
element = document.getElementsByName(parent);
for (i = 0; i < element.length; i++) {
if (element[i].checked == true) {
found = true;
}
}
if (!found) {
alert("Please answer the questions in order. It seems that you didn't answer a previous question");
document.getElementsByName(child).checked = false;
return false;
}
return true;
}
function disableAll(elements) {
var myelements = document.getElementsByName(elements);
for ( var i = 0; i < myelements.length; i++) {
myelements[i].disabled = true;
}
return true;
}
和我的单选按钮:
<input onclick="javascript: if(validatePreviousChecked('q1_financial_product','q1_product_likelihood[0]')){disableAll('q1_product_likelihood');}" value="1" name="q1_product_likelihood" type="radio" />
然而,第一个函数正在执行,返回true(我验证了它)但从来没有第二个!
有什么问题?
EDITED
这是另一个片段:
<input
value="1" name="q1_financial_product"
onclick="disableAll
('q1_financial_product')"
type="radio" />
答案 0 :(得分:1)
代码有很多问题。不要抨击它,但这里有一些建议。第一个是我认为问题的原因,其他只是为了改进你的代码。
"q1_product_likelihood[0]"
作为子参数传递给用于调用validatePreviousChecked
的{{1}}。这没有意义,控件的名称不应该是q1_product_likelihood [0]。如果有多个并且您想要第一个,则需要传递可用于调用document.getElementsByName("q1_product_likelihood[0]")
的其他index
参数。document.getElementsByName(child)[index]
变量是全局变量,i
也是如此。found
开头。这本身并没有错,因为JS将其视为标签,但它没有做你认为做的事情,删除这一点。javascript:
会返回true?不会造成任何伤害,但会给代码增加膨胀,并可能让某些人认为这意味着什么。你是如何确认它返回真实的?如果它返回true,则不能调用disableAll是不可能的。您应该通过指定添加日志语句的位置以及输出的位置来证明您已对其进行了验证。