【问题标题】:HTML/Jquery Hiding+Showing DependenciesHTML/Jquery 隐藏+显示依赖
【发布时间】:2012-09-28 20:17:08
【问题描述】:

所以我有一个下拉列表和几个复选框。下拉列表与用户只能选择一个选项的主要选择有关。复选框属于次要选择,用户可以选择任意数量的选项,但他们从下拉列表中选择的选项不会显示为选项之一。到目前为止,这是我的代码:fiddle

因此,例如,如果用户从下拉列表中选择选项 1,则只有选项 2-8 应可用作复选框。我想基本上隐藏 option1 并显示其余部分。我真的不知道这叫什么,所以我不知道要搜索什么或在哪里看。我想看看是否有某种 jquery 插件可以解决这个问题,但我应该怎么做呢?谢谢

【问题讨论】:

    标签: jquery html select drop-down-menu dependencies


    【解决方案1】:

    迈克尔,试试这个:

    javascript

    $(function(){
        $('#primary').on('change', function() {
            var $sec = $('.secondary'); 
            var idx = this.selectedIndex;
            $sec.find('input').attr('disabled', false).eq(idx).attr('disabled', true);
            $sec.find('label').removeClass('disabled').eq(idx).addClass('disabled');
        }).trigger('change');
    });
    

    CSS:

    .disabled {
        color: gray;
    }
    

    Demo

    我通过禁用而不是隐藏不需要的复选框稍微偏离了简报。这可能不会让用户感到困惑。如果没有,那么修改代码以隐藏/显示很容易:

    $('#primary').on('change', function() {
        $('.secondary').find('label').show().eq(this.selectedIndex).hide();
    }).trigger('change');
    

    Demo

    【讨论】:

      【解决方案2】:

      Check this DEMO

      你不需要插件。简单的 jQuery 就足够了

      试试这个

      $('#primary').on('change', function() {
          // Show all the options initially
          $('.secondary label').show();
          // Get the currently selected option
          var selected = $(this).val();
          // Hide the label that encases the option
          $('.secondary').find('input[type="checkbox"][value="'+ selected + '"]').closest('label').hide();
      
      }).change();​
      

      更新代码

      为此,您需要创建一个复选框模板,该模板可用于在选择更改时填充设计..

      $('#primary').on('change', function() {
          // Clone the checkbox template
          var $template = $('.template').clone();
          var selected = $(this).val();
          // Remove the selected option from cloned object
          $template.find('input[type="checkbox"][value="'+ selected + '"]').closest('label').remove(); 
      
          // Append to the DropDown
          $('.secondary').html( $template.html() );
      
      }).change();​
      

      UPDATED FIDDLE

      【讨论】:

      • 有没有办法收集所有的选择框而不是给隐藏的元素留个空隙?
      • 查看上面的帖子.. 更新了
      • 由于某种原因,这在我的页面中不起作用,它仍然与已删除元素的位置存在差距。有什么想法吗?
      • 您使用的是更新后的代码吗..??如果我们首先删除标签然后添加 html.. 你能展示一个可以修复的工作示例,因此不应该发生这种情况
      • 那是因为 标签。只需删除这些标签并添加标签 { display: block; }​ class..应该没问题
      猜你喜欢
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 2011-02-22
      • 2012-04-15
      • 2011-06-12
      • 2016-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多