1

我使用garlic.js 来保存复选框的输入状态(http://garlicjs.org/)。它工作得很好,但由于某种原因,jQuery 无法识别在页面重新加载后由garlic.js 检查输入的时间。

我可能在这里遗漏了一些东西,但不确定它是什么。

例如,如果我#myInput:checked ~ .wonka {width: 200px}在我的样式表中设置,Css 会识别它并将样式应用于.wonka每次页面加载并且输入通过大蒜获取其值时。当然,使用兄弟选择器是非常有限的(例如,如果类在主体上,我不能这样做)。

在 jQuery 中做类似的事情是行不通的:

// This is not working

if ($("#myInput").is(":checked")) {
    $("body").addClass("wonka");
}


// Neither this

if ($("#myInput").attr("checked")==true) {
    $("body").addClass("wonka");
}

注意:这应该在页面加载或刷新时立即触发,而不是在用户单击时触发。关键是在页面刷新(或从其他选项卡加载)时再次触发它,这样它就与刷新后相同。

当复选框被“单击”或“悬停”时,我确实可以触发其他事件。像这样,例如:

$("#myInput").on("change", function(){
    $("body").addClass("wonka");
});

但是,这又不是问题。为什么 jQuery 无法识别输入状态?,我使用了错误的代码?

4

3 回答 3

3

这是问题的最终代码。正如@leemo 所说,问题的发生是因为garlic.js 在DOM 准备好后检查了输入,所以这里的代码在窗口加载时触发,避免了这个问题。

$(window).on("load",function() {
    //the .is(":checked) and .attr("checked")==true methods works fine here too
    if ($('#myInput').get(0).checked == true) {
        $("body").addClass("wonka");
    }  
 });
于 2013-03-24T15:08:40.497 回答
1

我的怀疑是,在调用 $(document).ready() 之后,重新加载garlic.js 在页面上应用了保存的状态。因此,当 jQuery 检查状态时,它实际上是未检查的,因此是错误的。

看看延迟测试。也许$(window).on("load", function(){...})用作替代品。

于 2013-03-24T05:51:29.090 回答
0

使用 DOM 对象来确定是否选中了复选框始终是一致的。在 jQuery 中,你可以这样做:

if ($('#myInput').get(0).checked == true) {
  // element is checked
}

不一定保证其他方法适用于所有浏览器/jQuery 版本。看到这篇有用的文章Setting "checked" for a checkbox with jQuery? .

于 2013-03-24T04:25:23.193 回答