jquery复选框的实时点击事件在实际点击复选框时干扰了firefox。

0 人关注

我有以下指定的jquery代码。

$('#firstbox ul.checkboxlist input[type="checkbox"]').live('click',function(){
    $(this).parents('li').remove().clone().prependTo('#secondbox ul.checkboxlist').animate({backgroundColor: '#FAEA96'},100, function(){$(this).animate({backgroundColor: '#FFFFFF'},800);});

当你点击复选框时,它取走li,删除它,并把它放到第二个盒子里。在IE中运行良好。如果我点击标签上的文本,它也能正常工作。但是,如果我在firefox上直接点击复选框,firefox就会变慢,大约10/15秒,并记录这些错误。

警告。在rgb()中期待数字或百分比,但发现'NaN'。 在解析'background-color'的值时出错。 声明删除。

Firebug返回过多的递归。

为什么我点击标签和点击实际的复选框时不一样呢?

3 个评论
你不是应该使用 .parent('li') )而不是 .parents('li') )吗?
Joel
它不是一个直接的父本,它需要通过多个父本来找到李:)
如果列表是嵌套的,你可能想尝试 closest('li') 来获取第一个 li。
jquery
checkbox
click
live
Joel
Joel
发布于 2009-12-11
2 个回答
tvanfosson
tvanfosson
发布于 2009-12-12
0 人赞同

你在使用jQuery UI吗?如果你想对背景颜色进行动画处理,你至少需要使用核心效果。 另外,你有没有试过不使用clone()的情况? 因为你正在删除之前列表中的元素,你应该不需要克隆它们。 你也可以尝试使用 highlight ()效果--这似乎是你正在做的事情。

这些都没有解决你的确切问题,即为什么FF似乎有不同的处理方式,但希望其中一个能解决这个问题。

Joel
我没有使用UI,我已经包括了jquery颜色插件,以使.animate能够与颜色一起工作。除了点击复选框的时候,它的效果很好。
你有没有想过简单地获得jQuery UI的核心和效果部分,看看是否能解决你的问题? 我对颜色插件一无所知,但UI代码被广泛使用,可能会更强大。
andres descalzo
andres descalzo
发布于 2009-12-12
0 人赞同

根据jQuery文档中的方法 "remove "不需要这个方法,如果你使用课程 "appendTo "或其他方法。 我宁愿不需要使用 "克隆",在我看来,代码可以是这样的,在某些时候,我有双引号和单引号的问题( "input[type='checkbox']" ),因为这个原因,我用这种方式的引号。

remove()的信息

$("#firstbox ul.checkboxlist").find("input[type='checkbox']").live("click",function(){
    $(this)
        .parents("li")
        .prependTo("#secondbox ul.checkboxlist")
        .animate({backgroundColor: "#FAEA96"},100, function(){
            $(this).animate({backgroundColor: "#FFFFFF"}, 800);
移除事件,请点击

$("#firstbox ul.checkboxlist").find("input[type='checkbox']").live("click",function myEventClick(){
    $(this)
        .unbind("click", myEventClick)
        .parents("li")
        .prependTo("#secondbox ul.checkboxlist")
        .animate({backgroundColor: "#FAEA96"},100, function(){