【问题标题】:jQuery html attribute not working in IEjQuery html 属性在 IE 中不起作用
【发布时间】:2010-09-29 14:09:11
【问题描述】:

我在表单中使用国家和州下拉菜单。每当用户在下拉列表中选择国家时,该国家的各个州将填充在州下拉列表中。我正在使用 AJAX 调用填充下拉列表中的状态。问题是在 Mozilla 中填充了这些状态,但在 IE 中不起作用。我猜想在状态下拉列表中加载状态时 jQuery 存在一些问题。我使用的 jQuery 代码是

$('select#edit-country').change(function(e) {

    $.getJSON("loadContactUsStates",{id: $(this).val(), ajax: 'true'}, function(j){
        var options = '';

        for (var i = 0; i < j.length; i++) { 
            options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';

        }

    <!-----I guess the problem is with the below line------------------>
       $("select#edit-state").html(options);

    })//end json

});

【问题讨论】:

标签: jquery html forms


【解决方案1】:

尝试使用 append 代替 html 方法,如 post 中所述。

编辑

实际上,我自己也遇到过这个问题。对我来说,答案是先调用empty,然后调用append,这与使用 html 方法的效果(我认为?)相同。

【讨论】:

  • 应该,但请参阅我关于 1.4.2 损坏的帖子。
【解决方案2】:

另外(在我的例子中)检查你是否有有效的 html,我有不匹配的标签,它在 firefox 中工作并且在 IE(6-8)中没有

【讨论】:

  • 我也遇到了同样的问题,奇怪的是未关闭的标签会让 IE 忽略所有内容。
  • 这里也一样...我在我的一个
【解决方案3】:

添加到 .ajax 选项

缓存:假,

【讨论】:

    【解决方案4】:

    这对我有用:(我在 IE7 - IE9 和 Chrome 上测试过)

    看起来 IE 的诀窍是使用 DIV 包装器

    原始 html:

    <div  id="dynamicMenu"></div>
    

    jQuery 脚本:

    $.ajax({
    
                url: "/myapp/myajaxUrl.jsp",
                type: "GET",
                dataType: "html",
                async: false,
                success: function(msg) {
                    $("#dynamicMenu").html(msg);
                });
    

    msg 类似于:

    <TABLE>
    <TBODY>
     <TR>
      <TD><LABEL for="dropdown1">OS type:</LABEL></TD>
      <TD>
       <SELECT id="dropdown1">
        <OPTION selected value="">Select OS</OPTION>
        <OPTION value="WIN">Windoze</OPTION>
        <OPTION value="UX">Unix</OPTION>
        <OPTION value="LX">Linux</OPTION>
       </SELECT>
      </TD>
     </TR>
    </TBODY>
    </TABLE>
    

    我试过 .empty() .html() 无济于事,但上面的效果很好!

    【讨论】:

      【解决方案5】:

      以下方法为我解决了这个问题:

      $('Element ID OR Class').empty().html(string);
      

      首先使用empty(),然后使用html()设置html

      【讨论】:

      • 是的也为我工作。唯一的问题是 ie,这个方法解决了它。
      【解决方案6】:

      如果你使用 jquery 解析 xml,并且在 IE 中需要 html(),试试这个:

      var 内容 = ($.browser.msie) ? $(this).context.xml : $(this).html();

      这解决了我的问题。我希望它也会对某人有所帮助。

      您好。

      【讨论】:

        【解决方案7】:

        经过数小时的挫折后,我意识到 IE 不支持除 div 之外的 html5 元素的 jquery 属性函数。我试图这样做:

        success: function (response, textStatus, XMLHttpRequest) {
            $response = $(response.replace(/\t/g, " "));
            $responseHTML = $response.find("#pageContainer").html();
            $container.html($responseHTML);
        

        对于这个元素:

        <nav id="pageContainer" class="content">
        </nav>
        

        改成这样就解决了问题:

        <nav>
            <div id="pageContainer" class="content">
            </div>
        </nav>
        

        【讨论】:

          【解决方案8】:

          我刚刚遇到了同样的问题,建议的修复都没有帮助。原来传递字符串中的制表符是原因。一旦我删除了所有这些, html() 和 append() 都可以正常工作。猜猜 IE 没有格式化字符串.. hmpf.

          【讨论】:

            【解决方案9】:

            在收到带有函数 jQuery.ajax() 的 AJAX HTML 请求,然后尝试使用 jQuery( html_result_data ) 解析结果后,我遇到了同样的问题。解决方案是像这样在 html_result_data 中剥离标题和所有选项卡和“返回”:

            success: function( data ) {
               // God this is ugly
               data = data.split("<body>")[1].split("</body>")[0];
               data = data.split("\t").join("").split("\r").join("").split("\n").join("");                      
               data = jQuery( data );
               ...
            }
            

            【讨论】:

              【解决方案10】:

              Jukums 的评论让我尝试关闭 ColdFusion 调试输出,然后 .html() 在 IE8 中为我工作。强制调试输出关闭:

              <cfsetting showdebugoutput="No">
              

              【讨论】:

                【解决方案11】:

                就我而言,这就像更改 jquery 版本一样简单。我使用的是 jquery-1.3.2,我添加了这一行

                <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"> </script>
                

                而不是 jquery-1.3.2 导入。 无需更改我的源代码中的任何内容,.prepend 函数在 IE、FF 和 Chrome 中完美运行。

                【讨论】:

                  【解决方案12】:

                  我遇到了同样的问题,发现最简单的解决方案是使用replaceWith() 函数。

                  【讨论】:

                    【解决方案13】:

                    我在使用 IE 时遇到了问题:

                    $('#valor_total').html(valor_total); 
                    

                    其中id 与作为参数传递的变量同名。更改 ID 效果很好:

                    $('#div_valor_total').html(valor_total); 
                    

                    【讨论】:

                      【解决方案14】:

                      对我来说,我只能通过将我的选择放在一个占位符 div 中,然后通过 .html();该 div 的整个声明。完全有效。

                      【讨论】:

                        【解决方案15】:

                        另外请注意,如果您在选择器中使用 tagName 前缀,它会比仅使用 id 慢。

                        在你的情况下,只需使用$("#edit-state").append(options)

                        【讨论】:

                          【解决方案16】:

                          检查返回数据中的任何 JavaScript 在语法上是否正确。

                          我有一个带有逗号结尾的 JSON 选项对象,这足以让 IE 拒绝运行它。

                          【讨论】:

                            【解决方案17】:

                            在我的情况下,返回的数据在语法上也应该是正确的。 我有一些不匹配的标签,比如未闭合的标签

                            或 .. 等

                            检查所有数据是否正确

                            如果这是一个 ajax 请求,那么快速的调试方法是在您填充的区域之外添加一个文本区域,并使用返回的数据填充该文本区域。然后检查该数据是否存在不一致。 Jquery.html 在 IE 上运行良好

                            【讨论】:

                              【解决方案18】:

                              在 IE8 中转到 工具-> 互联网选项-> 然后选择 高级 标签。然后点击reset以重置所有 Internet Explorer 设置。

                              我以为我的代码有问题,但问题是 IE8。这是一种享受。

                              祝你好运,希望这会有所帮助。

                              【讨论】:

                                【解决方案19】:

                                您使用的是 1.4.2 吗?在 IE 中使用无效缓存条目的 cleanData 方法存在问题。可以在here 找到错误和相应的修复。这会影响对.html()的调用

                                【讨论】:

                                • 任何想法如何在不升级到新的 jQuery 版本的情况下解决这个问题?
                                • 是的。只需修改 jQuery 库以包含我在那里发布的行。
                                【解决方案20】:

                                html 在 IE 中不起作用时,我也遇到了同样的问题。

                                如果您的 html 无效,我相信它不起作用

                                例子:

                                就我而言,我使用的是没有关闭标签的 div。所以无效的html可能是IE的罪魁祸首

                                【讨论】:

                                  【解决方案21】:

                                  由于这里没有提到解决方案: 激活兼容模式时,我在 IE8 中遇到了同样的问题。解决方案是将 jQuery 对象传递给 .html() 函数,如下所示:

                                  $("select#edit-state").html($(options));
                                  

                                  如果选项是一个 jQuery 对象并且也是作为一个对象构建的,这不是问题。但在上面的例子中,这应该可以解决问题 - 至少对我来说是这样。

                                  【讨论】:

                                    【解决方案22】:

                                    就我而言,我不得不更改选择器,它是&lt;figure&gt; 标记。这就是我所拥有的:

                                    HTML:

                                    <figure id="imagen">...</figure>
                                    

                                    JS(不起作用):

                                    $("#imagen").html(res);
                                    

                                    我不得不替换为:

                                    HTML:

                                    <div id="imagen">...</div>
                                    

                                    JS(有效!):

                                    $("#imagen").html(res);
                                    

                                    【讨论】:

                                      【解决方案23】:

                                      就我而言,问题在于我在加载的数据中注释掉我的 javascript 的方式。

                                      // Works fine
                                      
                                      /* Works fine */
                                      
                                      <!-- This causes a syntax error in IE -->
                                      

                                      我之前在 IE 中从未遇到过任何问题,只有在使用 ajax 将其加载到现有页面时。其他浏览器也没有问题。

                                      【讨论】:

                                        【解决方案24】:

                                        向控制器添加无缓存属性为我解决了这个问题。

                                        从这个答案复制:https://stackoverflow.com/a/12948321/1389589

                                        【讨论】:

                                          猜你喜欢
                                          • 1970-01-01
                                          • 2013-12-13
                                          • 1970-01-01
                                          • 2015-11-21
                                          相关资源
                                          最近更新 更多