【问题标题】:When select box option is selected, hide and uncheck corresponding checkbox using jQuery选择“选择”框选项时,使用jQuery隐藏和取消选中相应的复选框
【发布时间】:2010-03-04 20:03:18
【问题描述】:

选择选项时,使用jQuery自动隐藏相应的复选框@ 987654321。例如,用户从选择框中选择项目 1,<div class="item1"> 立即隐藏。

警告:两者都是可见的,因此必须考虑更改选择选项的用户(例如,用户选择了相应复选框已被选中的选项)。必须删除选中状态,并隐藏相应的<div>

需要兼容FF、Safari、Opera、IE7+8(可以的话6个,不需要)

更新:默认选中选项对应的<div>应该在页面加载时隐藏。

更新 2:现已解决。非常感谢 Joel 和 ccramer。两种提议的解决方案都可以完美运行。我选择 ckramer 的解决方案作为接受的答案,因为它不需要额外的标记,但两种解决方案都很好用!

<select>
  <option selected="selected" id="item1" value="1">Item 1</option>
  <option id="item2" value="2">Item 2</option>
  <option id="item3" value="3">Item 3</option>
</select>

<div class="item1">
  <input type="checkbox" id="a-item1" value="5" />
  <label class="checkbox" for="a-item1">Item 1</label> 
</div> 

<div class="item2">
  <input type="checkbox" id="a-item2" value="6" />
  <label class="checkbox" for="a-item2">Item 2</label> 
</div>

<div class="item3">
  <input type="checkbox" id="a-item3" value="7" />
  <label class="checkbox" for="a-item3">Item 3</label> 
</div>

【问题讨论】:

    标签: jquery forms select checkbox


    【解决方案1】:

    我认为这样的事情会起作用:

    $(document).ready(function() {
        dealWithSelect($("select").find("option:selected").attr("id"));
    
        $("select").change(function(){
            var selectedId = $(this).find("option:selected").attr("id");
            $(this).find("option").each(function() {
                var optionId = $(this).attr("id");
                // could probably also use $("."+optionId).show(); here
                $("div."+optionId).show(); 
            });
            dealWithSelect(selectedId);
        });
    });
    
    function dealWithSelect(selectedId) {
        $("."+selectedId).hide().find(":checkbox:checked").attr("checked","");
    }
    

    更新以解决 cmets 中的问题

    我已经更新了原始代码块,所以它们都放在一起了。为了解决初始状态,我们得到了dealWithSelect 函数。我选择了一种稍微不同的方法来解决您的第二个问题,即在隐藏适当的 div 之前显示所有具有与选择选项值匹配的 Id 的 div。显示的项目列表应该被select中的选项列表绑定,所以页面上的其他div不应该显示。

    【讨论】:

    • 谢谢!效果很好!两个问题。我怎样才能让它尊重默认选择的选择选项?我在上面使用 jQuery 隐藏页面上的其他元素,每当我切换选择选项时它们就会显示出来。事实上,任何带有“display:none”的 div 都会被显示出来。
    • 再次感谢ckramer。关于你的第二个问题,我尝试了这两种方法,但由于某种原因,它们最终都永久隐藏了 div(它们不会回来)。关于第一个问题,我对如何将这些部分放在一起有点困惑。您能否编辑您发布的带有这些更改的原始代码?
    • 太棒了!这适用于默认选项。由于某种原因,当您更改选择框选项时,复选框 div 仍然没有再次显示。 (例如,用户选择了选项 1,其对应的 div 已正确隐藏。现在用户选择选项 2,其对应的 div 已正确隐藏,但选项 1 的对应 div 不再显示。)
    • 抱歉,请查看最新更新......我有一个流浪汉选择器,因为显然我并没有太关注自己
    【解决方案2】:

    编辑:第一次做对了。

    $("select").change(function() {
        var selected = $(this).val(); // 1, 2, 3, etc.     
    
        $("div:not(:visible)").show(); // show all
        // if you add a class to the checkbox divs (i.e. "selectdiv") replace with: "div.selectdiv"  
    
        $(".item" + selected) // get the div
            .hide()
            .find("input:checked") // find the checkbox inside the div
            .removeAttr("checked"); // uncheck the checkbox
    });
    

    到更新:

    $(function() {
        $(".item" + $("select").val()).hide()
    });
    

    【讨论】:

    • 谢谢!这有效,但复选框 div 永久消失。如果用户选择不同的选项,我需要他们回来。
    • 查看我的编辑。您应该提供一个通用类来挂钩 show() 而不是 :not(:visible),因为这将显示页面上的所有隐藏 div。
    • 谢谢乔尔!这很好用。知道如何隐藏默认选项的相应 div 吗? (见上面的更新)
    • 这非常有效,我选择了另一种解决方案作为接受的答案,因为它不涉及额外的标记,而且我不确定一种方法是否比另一种更快/更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    相关资源
    最近更新 更多