javascript - 在下拉列表中单击复选框时,复选框保持选中状态

标签 javascript jquery html checkbox

我有一个包含复选框的下拉列表:

<ul class="dropdown-menu columnsFilterDropDownMenu" id="columnsListDropDown">
   <li><a href="#" class="small" data-value="Type" tabindex="-1"><input type="checkbox" checked="">&nbsp;Type</a></li>
   <li><a href="#" class="small" data-value="Release" tabindex="-1"><input type="checkbox" checked="">&nbsp;Release</a></li>
</ul>

当我单击下拉列表中的条目时,我想将专用列隐藏到表格中。当我点击标签时我工作正常,但当我点击复选框时,复选框保持相同状态。

$('#columnsListDropDown a').on('click', function( event ) {
    var input = $(this).find("input");
    var columnName = $.trim($(this).text());
    if (event.target.localName === "input") {
    // Case where user has clicked on the input
        if ($(input).is(':checked')) {
            $("#myTable").find("[data-column='"+columnName+"']").show()
        } else {
            $("#myTable").find("[data-column='"+columnName+"']").hide()
        }
    } else {
    // Case where the user has clicked on the label, or in li element
        if ($(input).is(':checked')) {
            $("#myTable").find("[data-column='"+columnName+"']").hide()
            $(input).prop('checked', false);
        } else {
            $("#myTable").find("[data-column='"+columnName+"']").show()
            $(input).prop('checked', true);
        }
    }
    return false;
});

最佳答案

问题是因为您不能将表单输入包装在 <a> 中元素。 a会拦截点击事件。

要解决此问题,您可以将输入包装在 label 中.您还可以使用 value 大大简化您的代码。用于保存列名的复选框,以及 toggle()checked复选框的状态。然后您还可以 Hook 到 change复选框上的事件直接作为 <a>不会干扰点击事件。试试这个:

$('#columnsListDropDown :checkbox').on('change', function() {
  $("#myTable").find("[data-column='" + this.value + "']").toggle(this.checked);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<ul class="dropdown-menu columnsFilterDropDownMenu" id="columnsListDropDown">
  <li>
    <label class="small" data-value="Type">
      <input type="checkbox" checked="" value="Type">
      Type
    </label>
  </li>
  <li>
    <label class="small" data-value="Release">
      <input type="checkbox" checked="" value="Release">
      Release
    </label>
  </li>
</ul>

<table id="myTable">
  <tr>
    <td data-column="Type">Type</td>
    <td data-column="Release">Release</td>
  </tr>
</table>  

关于javascript - 在下拉列表中单击复选框时,复选框保持选中状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45209980/

相关文章:

jquery - 使用 jQuery Ajax 调用下载并保存文件

javascript - 如何使用 jquery 将 javascript 插入到文档中?

javascript - AJAX 调用并清理 JSON 但语法错误 : missing ; before statement

html - 将标题中心的 Logo + h2 与响应行为对齐

html - CSS3 中的悬停高度效果向下移动 div

javascript - yii 向 jquery-ui 提交重新样式

javascript - 理解 Promise.all

javascript - 如何提取/下载JS播放的音频?

javascript - 在 HTML 或 JavaScript 中设置自定义 userAgent

jquery - 如何给这个 jquery 切换自动高度(显示/隐藏)