Jquery单击事件和if else语句

时间:2013-12-13 19:14:25

标签: jquery

我只是不明白jquery。我知道if else语句是如何工作的,但这里有些不对劲。

$('.box').each( function() {
    alert ( ($this).find('input').attr('id') ) //here i see that click is 
                                            //made two times for that same element
                                            //and i dont know why
    $(this).click( function() {
        if ( $(this).find('label').attr('class') == 'active' ) {
           $(this).find('label').removeClass('active');
           $(this).find('input').prop("checked", false);
        }else{

          alert('shit');
          $label.find('input').prop("checked", true);
          $label.find('label').addClass('active')
        }
    }
}
});

有人可以告诉我为什么当我点击$(this)它首先发出“else”语句然后“if”语句?

我的HTML:

<% Profile.options('gender').each do |key, value| %>

<li class='box'><%= check_box_tag "search[gender][#{value}]", value, false%>
<%= label_tag "search[gender][#{value}]", key %></li>

<% end %>

所以当我点击标签时我想要“活跃”课程。当我第二次点击该标签时,我想从中删除“活动”类。

答案:

我必须将&lt;%= label_tag“搜索[性别] [#{value}]更改为”搜索[性别] [#{value}] _#{value}“ - 因为当标签具有与输入相同的ID时,它会进行两次点击事件。

1 个答案:

答案 0 :(得分:0)

.each()允许您循环遍历元素集合。 ID不是集合,它(应该是!)是单个元素。一个类可以是元素的集合。

该行:

alert($this).find('input').attr('id')

应该是:

alert( $(this).find('input').attr('id') );

缺少的括号会抛弃其他所有内容。首先解决这个问题。

如果您向我们展示您的HTML,并告诉我们您正在尝试做些什么,我们可以进一步提供帮助。