0

目的:以下のコードを修正し、ラジオボタンに焦点を合わせることがテキスト入力ボックスに焦点を合わせるように機能しない理由を理解します。

質問:なぜこれが機能しないのですか?

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が壊れます。コードの修正は素晴らしいでしょうが、私は「一生釣りをすることを気にしません...」

4

1 に答える 1

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.")支援をありがとう。

于 2013-01-24T17:02:06.520 に答える