2011-05-17 113 views
0

我使用这个代码:jQuery选择问题

$('fieldset input[type=checkbox]').each(function() {if($(this).attr('checked','checked')){ 
    var switches = $(this).parent().find('.switch'); 
    $(switches).attr('state','on') 
    $(switches).css({'left':"52px"}); 
    $(switches).parent().css({'background-position': "147px -37px"}); 
}}) 

但不知何故,我所有的复选框设置为checked="checked"我只是愚蠢或者是在代码干扰其他什么东西?

感谢您的帮助:)

编辑: 这里是HTML

<fieldset> 
     <input checked="checked" /> 
     <label></label> 
     <div class="toggle_box"> 
      <div class="switch" state="on"></div> 
     </div> 
    </fieldset> 
    <fieldset> 
     <input/> 
     <label></label> 
     <div class="toggle_box"> 
      <div class="switch"></div> 
     </div> 
    </fieldset> 

回答

1

您将checked值作为第二个参数传递给attr()。这导致它被设置。然后返回的是带有input的jQuery对象,它总是一个真值。

你如果条件应该是这样的(使用:checked伪类代替):

if ($(this).is(':checked')) { 

在一个侧面说明,你的内码可重构这样:

$(this).parent().find('.switch') 
    .attr('state', 'on') 
    .css({ 'left': "52px" }) 
    .parent() 
     .css({ 'background-position': "147px -37px" }); 

如果你使用缓存变量(即switches),你可以,但不要把它包装在jQuery函数中。它本身就是一个jQuery对象,所以不需要打包。

2

这段代码是干什么的......

$(this).attr('checked','checked') 

...返回该设置为了级联工作。 Object在JavaScript中始终是truthy

的Try ...

this.checked 

...返回复选框是否被选中与否。如果您想要使用jQuery方式,请使用$(this).is(':checked')。虽然我不会,但它更冗长,性能更差。

+0

使用DOM的+1。 – 2011-05-17 03:51:37

+0

我认为合适的词将是链接,而不是级联(这是CSS)。 – BoltClock 2011-05-17 03:54:00

+0

@BoltClock它被道格拉斯克罗克福德称为*级联*。我想它可以被称为两个。 – alex 2011-05-17 03:55:50

0

if($(this).attr('checked','checked'))将是你的问题。您将每个复选框分配为checked,而不是检查是否已选中。

0

乍一看,我看到你正在使用.is('checked')当我相信你想​​前面的冒号是不同之处。

更新:我看到你更新了代码。该行

if ($(this).attr('checked', 'checked')) 

实际上是设置所有'input:checkbox'元素进行检查。它应该是:

if ($(this).is(':checked')) 
1

if语句中的语句是将您的复选框设置为选中状态。特别是,这个声明:$(this).attr('checked','checked')

相反,你可以做if($(this).prop('checked'))

了解更多关于jQuery Prop method

或者,您可以这样做:this.checked,它可以直接访问DOM,也可以使用jQuery $(this).is(':checked')访问DOM。

0
$('fieldset input[type=checkbox]').each(function() {if($(this).attr('checked') == 'checked')){ 
var switches = $(this).parent().find('.switch'); 
$(switches).attr('state','on') 
$(switches).css({'left':"52px"}); 
$(switches).parent().css({'background-position': "147px -37px"}); 
}}) 
0

实际上有一个专门用于选中框的选择器。

$('fieldset input[type=checkbox]:checked').each(function(){ 
    var switches = $(this).parent().find('.switch'); 
    $(switches).attr('state','on') 
    $(switches).css({'left':'52px'}); 
    $(switches).parent().css({'background-position':'147px -37px'}); 
}); 

如果你使用它,你不必自己做任何逻辑。