【问题标题】:These jQuery custom check boxes aren't working correctly这些 jQuery 自定义复选框无法正常工作
【发布时间】:2011-11-19 03:17:50
【问题描述】:

我正在尝试在我的网站上使用这些自定义 MacOSX 样式的复选框(它是一个 jQuery 插件),但是当我选中一个时,它实际上并不会触发 $('#input').is(':checked');,直到您取消选中然后它才会被搞砸.

每当您选中一个框时,我都会在选中的行中添加一些 CSS 以为其添加黄色背景。但是,我遇到了他们的麻烦。这张图片解释如下:

我不明白为什么会这样。这是我的checkIt() 函数,它在您检查一行时添加黄色背景:

function checkIt(id) {
    if ($('#checkbox_' + id).is(':checked')) {
        $('#' + id).addClass("selected");
    }
    else {
        $('#' + id).removeClass("selected");
    }
}

当单击复选框时,我将其称为 onclick。以下是 PHP 生成的一些示例标记:

<span class="inbox_check_holder">
<input type="checkbox" value="96874" onclick="checkIt(96874)" id="checkbox_96874" class="inbox_check" />
<div class="star_clicker" id="star_96874" onclick="addStar(96874)" title="Not starred"><span id="starimg_96874" class="not_starred"></span></div>
</span>

我认为这与这个自定义复选框 jQuery 插件有关,它在 &lt;input /&gt; 上添加了额外的元素。

这里是jQuery checkbox plugin page,如果你需要看的话,他们有很多例子。 (显然)我使用的是“Safari”皮肤。

【问题讨论】:

    标签: javascript jquery checkbox


    【解决方案1】:

    试试

    $(".inbox_check").live("change",function(e){
    e.stopPropagation();
    if($(this).is(":checked"))
     $('#' + id).addClass("selected");
    else
     $('#' + id).removeClass("selected");
    });
    

    http://jsfiddle.net/BXjg7/3/

    使用 jquery 1.7 你可以使用on

    $("body").on("change", ".inbox_check", function(e){
            e.stopPropagation();
        if($(this).is(":checked"))
         $('#' + id).addClass("selected");
        else
         $('#' + id).removeClass("selected");
    });
    

    http://jsfiddle.net/BXjg7/10/

    delegate 示例

    $("body").delegate(".inbox_check","change", function(e){
    e.stopPropagation();  
        if($(this).is(":checked"))
         $('#' + id).addClass("selected");
        else
         $('#' + id).removeClass("selected");
    });
    

    http://jsfiddle.net/BXjg7/15/

    【讨论】:

    • 我可以把它放在我的checkIt() 函数中吗?
    • 对不起,我没有在答案中提到它,使用上述代码时,您不需要复选框的onClick事件
    • 我的 PHP 动态创建 HTML,我必须在函数中传递 ID,这就是我使用 onclick 的原因。我不太喜欢使用onclick,但为此我必须这样做,因为需要传递ID。
    • 如果你动态生成 html 使用live,或delegate,on(jquery 1.7),更新答案,你也有你不需要ID的类名.. .
    • 但是如何突出显示所选行的背景?当您单击一个复选框时,它应该会更改消息行的背景。 (你可以在我上面的截图中看到)而且,id 不再被定义。我明白我可以使用.inbox_check 作为onchange,但是更改所选消息背景的行的ID 是我需要传递ID 的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    相关资源
    最近更新 更多