【问题标题】:Select disappears on change in IE9选择在 IE9 中更改时消失
【发布时间】:2013-11-20 16:36:43
【问题描述】:

在 IE9 和我创建的选择下拉列表中遇到了一个非常奇怪的问题。

它只发生在 IE9 中,这真的很奇怪。

基本上,页面上有多个下拉菜单(总共 4 个)。当您单击其中一个并从下拉列表中选择一个选项时,父下拉列表将从页面中消失,并且从我所看到的 DOM 中也消失了。

当您从任何下拉菜单中选择一个选项时,就会发生这种情况。我把它缩小到了 IE9,这太疯狂了,因为它在 IE8 中运行良好

HTML

<div id="news7" style="width: 650px; overflow:hidden;">
  <h2 class="h2-3">20' DEEP</h2>
  <select name="booth-images" id="booth-dropdown" class="booth-images showName">
    <option value="">-- Select an option from the dropdown</option>
    <option value="http://enkshows.com/img/enkexhibitors/20X13FRONTsm.jpg" data-dimension="20X13">20X13</option>
    <option value="http://enkshows.com/img/enkexhibitors/20X15FRONTsm.jpg" data-dimension="20X15">20X15</option>
    <option value="http://enkshows.com/img/enkexhibitors/20X20FRONTsm.jpg" data-dimension="20X20">20X20</option>
    <option value="http://enkshows.com/img/enkexhibitors/20X23FRONTsm.jpg" data-dimension="20X23">20X23</option>
    <option value="http://enkshows.com/img/enkexhibitors/20X26FRONTsm.jpg" data-dimension="20X26">20X26</option>
    <option value="http://enkshows.com/img/enkexhibitors/20X30FRONTsm.jpg" data-dimension="20X30">20X30</option>
    <option value="http://enkshows.com/img/enkexhibitors/20X36FRONTsm.jpg" data-dimension="20X46">20X46</option>
    <option value="http://enkshows.com/img/enkexhibitors/20X40FRONTsm.jpg" data-dimension="20X40">20X40</option>
    <option value="http://enkshows.com/img/enkexhibitors/20X50FRONTsm.jpg" data-dimension="20X50">20X50</option>
  </select>
  <div class="image-display"></div>   
</div>

JS

$(document).ready(function(){
    $("select").each(function(){
        $(this).on('change', function(){
            var src = $(this).val();
            var imageSrc = "http://enkshows.com/img/enkexhibitors/";
            var title = $(this).find(":selected").data("dimension");
            var url = "<a rel='shadowbox' title='" + title + "' href='" + imageSrc + title + "FRONT.jpg' target='_blank'><img src='" + src + "'></a>";
            var title = "<p><a href='" + src + "' >" + title + "</a><p>"

            var $this = $(this);
            var $image = $(".image-display");
            var $imageDisplay = $(this).parent().find(".image-display");

            if ($this.val() == "") {
                $image.removeClass('active');
            } else {
                $image.removeClass('active').hide();
                $imageDisplay.addClass('active').show();
                $this.parent().find(".image-display a").not(":selected").remove();
                $this.parent().find(".image-display p").not(":selected").remove();
                $imageDisplay.addClass('active-display').append(url, title);
            }
        });
    });
});

另外,如果 JS 很草率,请见谅。我是新手,想变得更好,所以我完全愿意接受更清洁的解决方案。

【问题讨论】:

    标签: jquery internet-explorer select drop-down-menu internet-explorer-9


    【解决方案1】:
    $(document).ready(function(){
        $("#news7").on('change','select', function(){
                var src = $(this).val();
                var imageSrc = "http://enkshows.com/img/enkexhibitors/";
                var title = $(this).attr("data-dimension");
                var url = "<a rel='shadowbox' title='" + title + "' href='" + imageSrc + title + "FRONT.jpg' target='_blank'><img src='" + src + "'></a>";
                var title = "<p><a href='" + src + "' >" + title + "</a><p>"
    
                var $this = $(this);
                var $image = $(".image-display");
                var $imageDisplay = $(this).closest("#news7").find(".image-display");
    
                if ($this.val() == "") {
                    $image.removeClass('active');
                } else {
                    $image.removeClass('active').hide();
                    $imageDisplay.addClass('active').show();
                    $this.closest("#news7").find(".image-display a").not(":selected").remove();
                    $this.closest("#news7").find(".image-display p").not(":selected").remove();
                    $imageDisplay.addClass('active-display').append(url, title);
                }
            });
    
    });
    

    【讨论】:

    • $(this).closest("div") ?!
    • @Rituraj 感谢您的更新。这干净多了。为什么我们不需要 $.each();功能?
    • $(this).closest("#news7")。通过这个我们到达#news div,然后我们发现所需的元素父级与最接近的相比并不好
    • @patrick $("#news7").on('change','select', ... 这样它就可以得到所有选择元素,无需通过 $(this) 应用每个元素就像您在代码中所做的那样,我们会选择 val()
    • @Riturajratan 但由于 ID 在上下文页面上必须是唯一的,因此 $this.closest("#news7") 仅适用于一个元素(选择 #news7 容器的子元素)和顺便说一句,可以/应该写$('#news7').find(...)。现在,如果 OP 有重复的 ID,这是他需要提前解决的另一个问题
    猜你喜欢
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多