0

我有一个可以在 jsFiddle 中运行的 jQuery 脚本,但不能在实际网站上运行,我想不出还有什么可做的。

这是小提琴

这是网站

我需要一个复选框,单击该复选框将依次检查许多其他复选框。

$("form input[id='selectall']").click(function () {
    var inputs = $("form input[class='produse4export']");
    for (var i = 0; i < inputs.length; i++) {
        if (this.checked) {
            inputs[i].checked = true;
            checkme();
        } else {
            inputs[i].checked = false;
            uncheckme();
        }
    }
});

当这些复选框被选中时(一次全部),它们必须启用其他复选框。当它们被取消选中时,其余的复选框必须再次被禁用和取消选中(如果它们被选中)。

有点难以解释,但小提琴和网页都很容易阅读。为什么它没有按预期工作?

4

2 回答 2

3

您需要将script块移动到它作用的元素下方。

它在 jsFiddle 上工作的原因是 jsFiddle 有一个真正令人惊讶的脑死亡 默认行为,即将所有脚本放在从事件调用的函数中。(您可以在左侧看到它,它是从顶部算起的第二个选择框。)因此,在 jsFiddle 上,您的脚本代码在所有 HTML 都被解析并且元素存在之后才会运行。但是在您的网站上,您将代码放在其作用的元素之上,因此当您尝试获取它们时,它们还不存在。window#load

把东西放在哪里的口头禅是:“样式、内容、脚本”。将您的样式表(内联和链接)放在文档的顶部,将正文中的内容(很明显)放在底部,在所有内容之后。这样,当您的脚本运行时,元素就存在于 DOM 中。

也可以看看:

于 2013-05-19T10:25:10.007 回答
1

在小提琴中,您在页面加载时绑定事件。在您的页面上,您尝试在解析页面本身时执行此操作。

在您的页面上,将事件处理程序绑定代码更改为:

$(document).ready(function() {
    $("form input[id='selectall']").click(function () {
        ...
    });
});
于 2013-05-19T10:24:58.340 回答