【问题标题】:Why doesn't JQuery change select options in IE?为什么 JQuery 不更改 IE 中的选择选项?
【发布时间】:2012-07-15 18:34:30
【问题描述】:

我们正在尝试让一个投递箱更改另一个投递箱。我们有这段代码在 Firefox、safari 和 chrome 上运行良好。但在 IE 8+ 中,更改第一个下拉菜单对第二个下拉菜单没有影响。我们必须改变什么才能让它在 IE 中工作?谢谢,

我们有这个 jquery:

    //set up the global variable maxChecks which stops donor ticking too many boxes
    var maxChecks
    var checkCount=0
    var boxeschecked = 0
    //now change the drop down
    jQuery.noConflict();
    jQuery(document).ready(function($) {
        $(function() {      
            $("#json-one").change(function() {
                if ($(this).val() >= "1" ) {
                    $("#hide1").slideDown("fast"); //Slide Down Effect
                }
                var $dropdown = $(this);
                var key = $dropdown.val();
                var vals = [];
                switch(key) {
            case '1': document.getElementById("t3").innerHTML ="<option value=2>&pound;2.50 per month</option>, <option value=3>&pound;30 per year</option>, <option value=1>A single donation of &pound;30</option>"; maxChecks=1; boxeschecked=0; checkCount=0; document.getElementById("nsdiv").innerHTML =""; for (var i = 0; i < 1 ; i++) {document.getElementById("nsdiv").innerHTML +='<input type="hidden" name="childid[]" value="newchild" checked>';} break;
            case '2': document.getElementById("t3").innerHTML ="<option  value=5>&pound;5 per month</option>, <option value=4>&pound;60 per year</option>, <option value=22>A single donation of &pound;60</option>"; maxChecks=2; boxeschecked=0; checkCount=0; document.getElementById("nsdiv").innerHTML =""; for (var i = 0; i < 2 ; i++) {document.getElementById("nsdiv").innerHTML +='<input type="hidden" name="childid[]" value="newchild" checked>';} break;

case 'base': vals = ['-'];
                }
                $jsontwo.empty();
            });
        });
    });

这是html:

    <select id="json-one" name="json-one">
        <option selected value="base">Please select</option>
        <option value="1">1 child</option>
        <option value="2">2 children</option>
    </select>
    <!-- this select box will be hidden at first -->
    <div style="display:none;" id="hide1">
        By donating <select id="t3" name="t3"><option>-</option></select>
    </div>

【问题讨论】:

  • $jsontwo 是什么?声明前三个变量后,您还缺少结尾的分号。
  • 应该是selected="selected",而不仅仅是selected

标签: jquery internet-explorer select case option


【解决方案1】:

以下似乎在 IE 中工作:

    //set up the global variable maxChecks which stops donor ticking too many boxes
    var maxChecks;
    var checkCount=0;
    var boxeschecked = 0;
    //now change the drop down
    jQuery.noConflict();
    jQuery(document).ready(function($) {
        $(function() {      
            $("#json-one").change(function() {
                if ($(this).val() >= "1" ) {
                    $("#hide1").slideDown("fast"); //Slide Down Effect
                }
                var key = $(this).val();
                var vals = [];
            switch(key) {
              case "1": 
                $("#t3").html('<option value=2>&pound;2.50 per month</option> <option value=3>&pound;30 per year</option> <option value=1>A single donation of &pound;30</option>');
                maxChecks=1; 
                boxeschecked=0; 
                checkCount=0; 
                $("#nsdiv").html('');
                for (var i = 0; i < 1 ; i++) {
                    $("#nsdiv").append('<input type="hidden" name="childid[]" value="newchild" checked>');
                } 
                break;
              case "2": 
                $("#t3").html('<option  value=5>&pound;5 per month</option> <option value=4>&pound;60 per year</option> <option value=22>A single donation of &pound;60</option>'); 
                maxChecks=2; 
                boxeschecked=0; 
                checkCount=0; 
                $("#nsdiv").html('');
                for (var i = 0; i < 2 ; i++) {
                    $("#nsdiv").append('<input type="hidden" name="childid[]" value="newchild" checked>');
                } 
                break;

              case 'base': 
                vals = ['-'];
                break;
            }
            });
        });
    });
​

查看示例:http://jsfiddle.net/m6A8z/

【讨论】:

  • @oliver - 那么你为什么不在接受答案之前寻求解释呢?
  • 我已将您对 innerHTML 的使用替换为 jQuery 的 append/html 方法。在对表单元素使用 innerHTML 时,IE 有时会出现奇怪的行为。 jQuery 的方法通常被编程来解决由于各种浏览器之间的差异而可能出现的问题。
  • 太棒了!我确实花了一些时间在谷歌上搜索并查看用于 innerHTML 的 stackoverflow,但永远无法确定替代方案是什么。 (我自愿建造这个东西 - 不是专家!)非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多