-1

明らかなことを見逃していると確信していますが、次の addEventListener コードがどこでも (送信ボタンだけでなく) 発火する理由はわかりますか?

HTML:

    <form action="#">
        <input type="text"><br>
        <input type="text"><br>
        <button id="submit">submit</button><br>
    </form>

JS:

    function validate () {
        var inputs = document.getElementsByTagName('input');
        var inputs_length = inputs.length-1;
        for (i=0; i<=inputs_length; i++) {
            var inputs_value = document.getElementsByTagName('input')[i].value;
            if (inputs_value == "") {
                alert('there is a text box empty');
            }
        }

    }   

    var el = document.getElementById('submit');

    if (el.addEventListener) {  
        el = addEventListener('click', validate, false);   
    } else if (el.attachEvent)  {  
      el.attachEvent('onclick', validate);  
    } 

修正は変更です

el = addEventListener('click', validate, false); 

el.addEventListener('click', validate, false); 

私のタイプミス:(

4

2 に答える 2

1

これを変える:

if (el.addEventListener) {  
    el = addEventListener('click', validate, false);  

これに:

if (el.addEventListener) {  
    el.addEventListener('click', validate, false);  
于 2012-05-11T10:50:12.473 に答える
0

長いコメント。

あなたのコードでは:

    // inputs is an HTMLCollection of all the inputs
    var inputs = document.getElementsByTagName('input');

    // No need for the -1
    var inputs_length = inputs.length;

    // Don't forget to declare counters too, very important
    // Just use < length
    for (var i=0; i<inputs_length; i++) {

        // Instead of this very inefficient method
        var inputs_value = document.getElementsByTagName('input')[i].value;

        // use the collection you already have
        var inputs_value = inputs[i].value;

        if (inputs_value == "") {
            alert('there is a text box empty');
        }
    }

またinputs_value、すべての宣言が1つの場所にあるように、最初に宣言することをお勧めしますが、あなたが持っているように、それは有害ではありません。

ああ、フォーム要素に「submit」(または他のフォームメソッド)の名前またはIDを指定しないでください。同じ名前のフォームメソッドがシャドウされ、呼び出せなくなります。

于 2012-05-11T11:13:19.590 に答える