javascript - 选中列表中的复选框

标签 javascript jquery

我想自动取消选中或选中子项的复选框:

HTML:

<ul>
    <li>1 <input type='checkbox' /></li>
    <ul>
        <li>1.1 <input type='checkbox'' /></li>
    </ul>
    <ul>
        <li>1.1.1 <input type='checkbox' /></li>
    </ul>
</ul>

Javascript:

$('li input').change(function(){
    if($(this).is(":checked")){
        $(this).parent().next().children("li").children("input").attr("checked", true);
        console.log("checked")
    }else{
        $(this).parent().next().children("li").children("input").attr("checked", false);
        console.log("not checked")
    }
})

但它只适用于第一次出现。我不明白为什么,因为1.1更改并且事件更改没有触发

http://jsfiddle.net/D8ZdU/

谢谢

最佳答案

如果您将 HTML 更正为以下内容:

<ul>
    <li>1 <input type="checkbox" />
        <ul>
            <li>1.1 <input type="checkbox" />
                <ul>
                    <li>1.1.1 <input type="checkbox" /></li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

然后下面的 jQuery 就可以工作了:

$('input:checkbox').change(
    function(){
        var state = this.checked ? true : false;
        $(this).next('ul').find('input:checkbox').prop('checked', state);
    });​

JS Fiddle demo .

HTML 的问题在于 ul 元素不是另一个 ulol 元素的有效子元素。 ul(和 ol)的唯一有效子元素是 li 元素,一切都无效,除非它是包含在 li 中。

引用文献:

关于javascript - 选中列表中的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13893184/

相关文章:

jquery - 延迟加载和自定义渲染

javascript - 从字符串中获取第二个和第三个单词

php - zend 如何在同一操作中验证 3 个单独的表单?

javascript - 如何从嵌套的对象数组中获取每个父级的值

javascript - 如何使用 jQuery 左右滚动 2 个 div(页面)?

javascript - 出现在链接按钮(文本)旁边的基本简单模态弹出 Div(js 脚本)

javascript - 如何在保留点击处理程序的同时重新排列一组 html 元素?查询

javascript - 未捕获的语法错误 : Unexpected token a in JSON at position 0 at JSON. 解析(<匿名>)

JQuery POST 到 Golang 破坏字段名称

javascript - 在 contenteditable div 上检测 ctrl+a/cmd+a 键码