jQuery html属性在IE中不起作用

时间:2009-01-05 10:18:55

标签: jquery html forms

我在我的表单中使用国家和州的下拉列表。每当用户在下拉列表中选择国家/地区时,国家/地区的相应州将填入州下拉列表中。我使用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

});

24 个答案:

答案 0 :(得分:12)

尝试使用附加代替 html 方法,详见此post

修改

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

答案 1 :(得分:10)

另外(在我的情况下)检查你是否有有效的HTML,我有不匹配的标签,它在Firefox中工作,并没有在IE(6-8)

答案 2 :(得分:9)

添加到.ajax选项

cache:false,

答案 3 :(得分:4)

以下方法解决了我的问题:

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

首先使用empty()&amp;然后使用html()

设置html

答案 4 :(得分: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 :(得分:3)

如果您使用jquery解析xml,并且在IE中需要html(),请尝试以下操作:

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

这解决了我的问题。我希望它也会帮助别人。

问候。

答案 6 :(得分:3)

经过数小时的挫折后,我意识到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>

答案 7 :(得分:1)

在收到带有 jQuery.ajax()函数的AJAX HTML-Request后,尝试使用 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 );
   ...
}

答案 8 :(得分:1)

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

答案 9 :(得分:1)

就我而言,改变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中完美运行。

答案 10 :(得分:1)

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

<cfsetting showdebugoutput="No">

答案 11 :(得分:1)

我在IE上遇到了一个问题:

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

其中id与作为参数传递的变量具有相同的名称。改变身份证明工作得很好:

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

答案 12 :(得分:1)

对我来说,我只能将我的选择放在占位符div中,然后通过.html()进行写操作。对该div的整个陈述。完全有效。

答案 13 :(得分:1)

我刚遇到同样的问题,并且没有任何建议的修复程序有帮助。结果是传递的字符串中的制表符是原因。一旦我删除了所有这些,html()和append()都运行得很好。猜猜IE没有格式化的字符串.. hmpf。

答案 14 :(得分:0)

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

我相信如果您的html无效

,它就无效

示例:

对于我的情况,我使用没有关闭标签的div。所以无效的HTML可能是IE的罪魁祸首

答案 15 :(得分:0)

在我的情况下,我必须更改<figure>标记的选择器。这就是我所拥有的:

HTML:

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

JS(不起作用):

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

我不得不替换为:

HTML:

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

JS(有效!):

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

答案 16 :(得分:0)

在我的情况下,问题在于我在正在加载的数据中评论我的javascript的方式。

// Works fine

/* Works fine */

<!-- This causes a syntax error in IE -->

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

答案 17 :(得分:0)

将no cache属性添加到控制器为我修复此问题。

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

答案 18 :(得分:0)

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

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

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

答案 19 :(得分:0)

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

的调用

答案 20 :(得分:0)

在IE8中,转到工具 - &gt; 互联网选项 - &gt;然后选择高级标签。然后单击重置以重置所有Internet Explorer设置。

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

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

答案 21 :(得分:0)

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

或..等等

检查所有数据是否正确

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

答案 22 :(得分:0)

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

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

答案 23 :(得分:0)

另请注意,如果在选择器中使用tagName前缀,则比使用id更慢。

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