【问题标题】:Check box uncheck Remove <li> item from list复选框取消选中从列表中删除 <li> 项目
【发布时间】:2016-02-04 16:34:16
【问题描述】:

我想通过选中和取消选中复选框来操作数组。我有一个数组列表,我想在取消选中复选框时从数组中删除该项目。默认情况下必须显示列表并且必须选中复选框。

<div id="x">
  <input type="checkbox" class="chkbox" value="Home"> Home
  <input type="checkbox" class="chkbox" value="Mayor Conner"> Mayor Conner
</div>
</br></br></br>

<div class="mainPanel">
  <div id="cssmenu">

  </div>
</div>

var mainPanel = [{
  title: "Home",
  id: "lnk_home"
}, {
  title: "Mayor's Conner",
  id: ""
}];

$(document).ready(function createlist() {
  console.log('createlist called');
  var items = '';
  var ulStr = "<ul>";
  for (var i = 0; i < mainPanel.length; i++) {
    items += '<li><a href="" id="' + mainPanel[i].id + '">' + mainPanel[i].title + '</a></li>';
  }
  ulStr += items;
  ulStr += '</ul>';
  $("#cssmenu").append(ulStr);
});

$(document).ready(function() {
  var $mlist = $("#menuPanel");

  $(".chkbox").onchange(function() {
    var list = this.value;
    if (this.checked) {
      $list.append('<li>' + mlist + '</li>');
    } else {
      $("#menuPanel li:contains('" + mlist + "')").slideUp(function() {
        $(this).remove();
      })
    }

  })
});

这里是fiddle

【问题讨论】:

  • 因此,当用户选中 Home 复选框时,您希望删除 Home 链接。是吗?
  • 是的,我想在取消选中 Home 链接时删除它,当所有
  • 项目都显示时,我将如何默认显示复选框。
  • 请检查浏览器开发工具控制台中的错误!首先会看到$().onchange 不是一个函数......当你修复它会看到$list 是未定义的。您的控制台应该是故障排除的第一线
  • 1) 为什么有两个$(document).ready() 处理程序? 2)Uncaught TypeError: $(...).onchange is not a function(你是说$(...).change()吗?)3)$list is not defined(你是说list吗?)4)mlist is not defined(你是说$mlist吗?)5)list.append is not a function...
  • 标签: jquery arrays json checkbox


    【解决方案1】:
    <div id="x">
        <input type="checkbox" class="chkbox" value="Home" checked=""> Home
        <input type="checkbox" class="chkbox" value="Mayor_Conner" checked=""> Mayor Conner
    </div>
    <br/><br/><br/>
    
    <div class="mainPanel">
        <div id="cssmenu">
            <ul>  </ul>
        </div>
    </div>
    <script>
    
        $(document).ready(function () {
            var arrMainPanel =
                    [
                        {
                            title: "Home",
                            id: "lnk_home",
                            class: "Home"
                        },
                        {
                            title: "Mayor's Conner",
                            id: "",
                            class: "Mayor_Conner"
                        }
                    ];
            arrMainPanel.forEach(function (objSinglePanel) {
                $("<li>", {
                    class: objSinglePanel.class,
                    html:'<a href="" id="' + objSinglePanel.id + '">' + objSinglePanel.title + '</a>'
                }).appendTo("div#cssmenu ul");
            });
    
            $(".chkbox").change(function () {
                $("li." + $(this).val()).show();
                if (!$(this).is(":checked"))
                {
                    $("li." + $(this).val()).hide();
                }
            });
        });
    </script>
    

    【讨论】:

    • 现在我有一个小问题,当我转到其他页面时,它没有保存设置。即使复选框未选中,列表也会显示。任何想法。
    • 我认为我们应该在创建列表之前给出一个 if 条件。如果数组标志为真,则创建一个数组元素,否则转到下一步。并且在复选框中,标志在选中时为真,在未选中时为假。你能给我这个逻辑的语法代码吗
    【解决方案2】:

    这里发生了很多事情。先上代码,再解释如下:

    试试这个:

    var mainPanel = [{
      title: "Home",
      id: "lnk_home"
    }, {
      title: "Mayor's Conner",
      id: ""
    }];
    
    function createlist() {
      //alert('createlist called');
      var items = '';
      for (var i = 0; i < mainPanel.length; i++) {
        items += '<li><a href="" id="' + mainPanel[i].id + '">' + mainPanel[i].title + '</a></li>';
      }
      $("#cssmenu ul").append(items);
    }
    
    $(document).ready(function() {
    
      createlist();
    
      $(".chkbox").on("change", function() {
        var list = $(this).val();
        if ($(this).is(":checked")) {
          $("#cssmenu ul").append('<li>' + list + '</li>');
        } else {
          $("#cssmenu ul li:contains('" + list + "')").slideUp(function() {
            $(this).remove();
          })
        }
    
      })
    });
    

    我做了什么:

    • 将&lt;ul&gt;作为html结构的一部分(不需要放在jquery中)
    • 修复了选择器以访问列表属性
    • 更正了检查checkbox 是否已被检查的方式
    • 将createlist() 函数移到$(document).ready() 之外
    • 使用val()函数获取复选框的值
    • 将错误的onchange() 方法更改为on("change", ...
    • 移动了变量。 $mlist 无效。看起来你有点混淆了语法

    【讨论】:

    • 好的。现在再试一次
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签