验证onclick javascript的多个问题

时间:2011-11-17 06:47:27

标签: javascript html

我已经看到了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" />

1 个答案:

答案 0 :(得分:1)

代码有很多问题。不要抨击它,但这里有一些建议。第一个是我认为问题的原因,其他只是为了改进你的代码。

  • 您将"q1_product_likelihood[0]"作为子参数传递给用于调用validatePreviousChecked的{​​{1}}。这没有意义,控件的名称不应该是q1_product_likelihood [0]。如果有多个并且您想要第一个,则需要传递可用于调用document.getElementsByName("q1_product_likelihood[0]")的其他index参数。
  • validatePreviousChecked循环中的document.getElementsByName(child)[index]变量是全局变量,i也是如此。
  • 你的onclick处理程序以found开头。这本身并没有错,因为JS将其视为标签,但它没有做你认为做的事情,删除这一点。
  • 您应该从onload / domready处理程序设置处理程序,而不是从HTML中调用JS,然后您可以使用常规的,更具可读性的函数作为可以调试的处理程序,内联代码更难调试。 / LI>
  • 为什么javascript:会返回true?不会造成任何伤害,但会给代码增加膨胀,并可能让某些人认为这意味着什么。

你是如何确认它返回真实的?如果它返回true,则不能调用disableAll是不可能的。您应该通过指定添加日志语句的位置以及输出的位置来证明您已对其进行了验证。