2

HTMLにいくつかのチェックボックスがあり、次のように設定されています:

<td nowrap width='25%'><label><input type='checkbox' name='chk[]' checked onChange="updateWindow('Label 1', this.checked)">&nbsp;Label 1</label></td>

また、これらのチェックボックスのすべてのリンクをチェック/チェック解除します:

<td><a href="javascript:checkAll(0);">Unckeck all</a></td>

このコードで:

function checkAll(checkValue) {
    checkboxes = document.getElementsByName('chk[]');
    for (var checkbox in checkboxes) {
        checkbox.checked = checkValue;
        activateEvent(checkbox, 'change');
     }
}

最初の問題は、このようにチェックボックスをオン/オフしても、onChangeイベントと関連するメソッドがトリガーされないことです。だから私はそれを手動で呼び出してトリガーします:

function activateEvent(item, actionShortName) {

    if (document.createEventObject){    // dispatch for IE
        item.fireEvent("on" + actionShortName); 
    }
    else {  // dispatch for firefox + others
        var evt = document.createEvent("HTMLEvents");
        evt.initEvent(actionShortName, true, true); // event type,bubbling,cancelable
        item.dispatchEvent(evt);
    }
}

これは、IE8 および一部の古いバージョンの Firefox で正常に動作します。しかし... firefox 23では、javascriptエラーが表示されます:

"TypeError: item.dispatchEvent is not a function"

これをすべてのブラウザで機能させるにはどうすればよいですか?

4

1 に答える 1

1

あなたのforループは間違っています。 checkboxesNodeList になり、それを超えることはできませんfor(in)(プロパティ名に関心がない限り)。

通常のfor (var i = 0; i < checkboxes.length; ++i) checkboxes[i]...ループを使用します。

于 2013-09-05T01:55:13.487 に答える