【问题标题】:Jquery how to add attribute to father object?Jquery如何将属性添加到父对象?
【发布时间】:2014-09-18 12:42:04
【问题描述】:

情况是这样的

我有这个 jquery 代码

$("li").click(function(){
var checkbox = $(this).find("input[type='checkbox']");

    if( checkbox.prop("checked") == "" ){
        checkbox.prop("checked", true);
        (this).addClass("on");
    } else {
        checkbox.prop("checked", false);
        ("li").removeClass("on");
    }
});

还有这个html

<ul id="id_priori">
<li><label for="id_priori_0"><input id="id_priori_0" name="priori" type="checkbox"> Hola</label></li>
</ul>

我想要做的是在

上添加/删除类
  • 取决于复选框是选中还是未选中,但它不起作用
  • 【问题讨论】:

      标签: jquery css function class checkbox


      【解决方案1】:

      几个错误:

      更改:

      ("li").removeClass("on");
      

      收件人:

      $("li").removeClass("on"); // You are missing the $
      

      更改:

      (this).addClass("on");
      

      收件人:

      $(this).addClass("on"); // You are missing the $
      

      另外,使用.is(:checked') 来查看复选框是否被选中。

      试试这个:

      $(document).ready(function () {
          $('li').addClass('on');
          $("li").click(function () {
              var checkbox = $(this).find("input[type='checkbox']");
              if (checkbox.is(':checked')) {
                  $(this).addClass("on");
              } else {
                  $(this).removeClass("on");
              }
          });
      });
      

      JSFiddle Demo

      【讨论】:

      • 它工作:D,但我需要别的东西,当你重新加载页面时,如果单击复选框,我希望 li 有课程,我该怎么做?
      • 更新的答案 :) 我将 checked 添加到 htmlinput 中,以便在页面加载时检查它。还在ready函数上使用了addClass
      • 是的,我正在尝试对其进行一些调整,因为由于某种原因,它们都具有属性,即使是那些未检查的属性
      • 好像当我发送表单时它不运行 jquery 代码,知道吗?
      • 当然 :) jsfiddle.net/9FWmf/5 ,发送表格,回去看看我在说什么
      【解决方案2】:

      您可以将其简化为

      $("li").click(function(){
          var self = $(this),
              checkbox = self.find("input[type='checkbox']")[0];
      
          // change the checkbox state
          checkbox.checked = !checkbox.checked;
      
          self.toggleClass( 'on', checkbox.checked );
      });
      

      最好将处理程序委托给ul

      $("#id_priori").on('click', 'li', function(){
          var self = $(this),
              checkbox = self.find("input[type='checkbox']")[0];
      
          // change the checkbox state
          checkbox.checked = !checkbox.checked;
      
          self.toggleClass( 'on', checkbox.checked );
      });
      

      http://jsfiddle.net/gaby/W9D8n/2/的演示


      更新

      使预检查的li 元素添加on

      .find(":checkbox").each(function(){
         $(this).closest('li').toggleClass('on', this.checked);
      });
      

      到代码。

      $("#id_priori").on('click', 'li', function(){
          var self = $(this),
              checkbox = self.find(":checkbox")[0];
      
          // change the checkbox state
          checkbox.checked = !checkbox.checked;
      
          self.toggleClass( 'on', checkbox.checked );
      
      }).find(":checkbox").each(function(){
      
          $(this).closest('li').toggleClass('on', this.checked);
      
      });
      

      http://jsfiddle.net/gaby/W9D8n/3/的演示

      【讨论】:

      • @Maks 注意到复选框行末尾的[0];这将从 jquery 对象中提取 DOM 元素,因此您可以访问其 checked 属性。
      • 对,但问题是当我单击 li 时,它会检查并取消选中复选框,而不是标签,因此代码不起作用:/
      • 现在它可以工作了:) 但是我遇到了和上面一样的问题,当我发送表单并且它有一个错误时,复选框被选中的 li 没有类“on”
      • @maks,添加了更新来处理这种情况。 (但老实说,这可能应该在呈现 html 时在服务器端处理
      • 抱歉,我再次需要你的帮助,所以我可以做同样的事情,但是使用单选按钮我希望当你点击另一个单选按钮时,之前选择的单选按钮会删除“on”类
      猜你喜欢
      • 2015-11-15
      • 2011-11-23
      • 2016-07-16
      • 2016-08-29
      • 1970-01-01
      • 2015-09-21
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多