如何单击克隆标签并将复选框选中的属性更改为false&单击复选框并删除克隆

时间:2017-06-02 22:52:04

标签: jquery checkbox clone

我有一个需要改进的搜索过滤器。应该发生的是,当您单击过滤器(复选框和单选按钮)时,相应标签的克隆将在标题部分中输出。然后,当再次单击复选框或单选按钮时,标签应该消失。克隆标签也是如此。如果删除此复选框,则应将其属性更改为未选中。

两个并发症。 1)任何解决方案必须使用jQuery 1.7 2)在页面上使用AJAX。为了解决奇怪的问题(例如,在初始打开后立即再次触发slideToggle)我正在使用$("section label").one("click", function() { var clonedContent = $(this) .first() .clone() .children() .end() .addClass("clone"); $("header").append(clonedContent).addClass("clone"); }); $("header").on("click", ".clone", function() { var forAttr = $(this).attr("for"); console.log(forAttr); // $(this).parents(".wrap").find(forAttr).removeClass("is-checked").siblings('input').prop('checked',false); $(this) .remove() .parents(".wrap") .find("section label") .removeClass("is-checked"); }); $("section label").click(function() { $(this).toggleClass("is-checked"); }); ,但这会导致克隆只创建一次。

所以我有两个问题。单击克隆并使用vise Versa

时,如何删除复选框上的checked属性

EXAMPLE of below code in action

{{1}}

1 个答案:

答案 0 :(得分:0)

  1. 当您使用label for="one"时,相应的input应该有id="one"。否则标签不会按预期更改输入的状态。

  2. 您可以更好地跟踪输入检查状态而非点击次数。所以js会很简单。

  3. 请用以下内容替换您的html和js:

    <div class="wrap">
      <header></header>
      <form>
        <div class="label-wrap"><label for="one">Checkbox 1</label><input id="one" type="checkbox" /></div>
        <div class="label-wrap"><label for="two">Checkbox 2</label><input id="two" type="checkbox" /></div>
        <div class="label-wrap"><label for="three">Checkbox 3</label><input id="three" type="checkbox" /></div>
    
        <p>note that &lt;input&gt; will be hidden eventually and replaced with a toggled :before</p>
      </form>
    </div>
    
    
    $('input').on('change', function() {
      var self = $(this);
      if(self.is(':checked')) {
        self.prev('label').clone().addClass("clone")
        .appendTo("header");
        self.prev('label').addClass("is-checked");
      } else {
        $('header label[for="' + self.attr('id') + '"]').replaceWith('');
        self.prev('label').removeClass("is-checked");
      }
    });