Javascript检查/取消选中所有功能.IE不会更新

Kyl*_*ser 2 javascript internet-explorer

function checkUncheckAll(theElement) {
        var theForm = theElement.form, z = 0;
        while (theForm[z].type == 'checkbox' && theForm[z].name != 'checkall') {
                theForm[z].checked = theElement.checked;
                z++;
        }
}
Run Code Online (Sandbox Code Playgroud)

theElement是复选框列表底部的checkall复选框.单击时,它调用此函数将所有复选框以相同的形式设置为checkall的值.

除了IE中的一个小故障外,它适用于所有浏览器.单击checkall框后,似乎复选框已更新,但您没有看到它.如果单击页面上的任意位置,则复选框将更新为其正确状态.检查和取消检查都会发生这种情况.

Tim*_*own 9

没有jQuery这很容易,这在这里是不必要的.

function checkUncheckAll(theElement) {
    var formElements = theElement.form.elements;
    for (var i = 0, len = formElements.length, el; i < len; ++i) {
        el = formElements[i];
        if (el.type == "checkbox" && el != theElement) {
            el.checked = theElement.checked;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

更新

事实证明,主要的问题是checkUncheckAll()函数是从change复选框上的事件处理程序调用的,在复选框失去焦点之前不会在IE中触发,因此修复只是将其更改为使用click事件处理程序而不是.

  • @TelegramSam:感谢您的批准.我非常强烈地不同意你对jQuery的看法,包括向刚接触JavaScript的人推荐它的部分,但是你去了. (4认同)
  • 虽然我非常强烈地认为没有jQuery的javascript几乎不是javascript,但我确实喜欢你在for语句中声明多个局部变量的好js形式.推荐jQuery的另一个原因是该问题是从ServerFault迁移的,表明这是js的新手.查找jQuery可以成为新javascript用户的主要帮助. (2认同)
  • Downvoter:我承认我心情不耐烦,并且可能挑战你对jQuery神圣性的信念,但是如果你打算投票,至少要解释一下.我的回答是对的. (2认同)
  • @Mike:任何时候!我甚至不用思考就能做出不耐烦的脾气暴躁和幼稚的烦恼,互联网永远不会忘记. (2认同)