IE&lt; = 8从AJAX </form>收到时删除<form>标签

时间:2011-08-07 01:25:10

标签: jquery ajax internet-explorer

我正在进行AJAX POST调用以获取一些HTML。我把那个HTML并将其注入DOM。除了IE&lt; = 8之外,所有浏览器中的一切都运行良好和花花公子。似乎IE正在解析传入的HTML,因为当我将其记录到控制台/提醒它时,标签是大写字母。

它要删除的行:

<form class="uniForm" enctype="multipart/form-data" action="/profile/editprofile/" method="post">

非常奇怪,因为结束标记在那里,但开始标记不是。该调用是一个标准的jQuery POST($ .post())。

更新

结束放弃并将其放入嵌入式文本区并重新注入DOM:

<!--[if lt IE 9]>
<textarea class="ieHackTextArea">
<!--[if lt IE 9]>
<![endif]-->

......其他地方......

if ($.browser.msie && parseFloat($.browser.version) < 9) {
    ui.panel.innerHTML = $(".ieHackTextArea").val(); // jQuery injection doesn't work
}

5 个答案:

答案 0 :(得分:12)

我今天遇到了完全相同的问题并设法通过在<pre></pre>之前插入一个空<form>来修复它,它以某种方式停止IE8(尚未在其他版本中测试过) )从删除<form>

答案 1 :(得分:1)

您可以尝试将所有表单包装到<div>中,看看它是否更有效。

我遇到了与<input>对象相同的问题,这是我的解决方案,以确保它在IE8中正常工作。

答案 2 :(得分:0)

我有完全相同的情况,同样的问题略有扭曲。我得到一个输入类型=隐藏标记,删除以及表单标记。 我没有找到发生这种情况的原因。自去年8月以来,有没有人发现这个问题的新内容?

此外,我尝试将表单包装在div标签中,并且没有任何更改。如果我写一些文字,或者$ nbsp;在表单标记上方的一行上,表单将呈现。

我也可以确认这个问题在IE7中也是如此(如果重要的话)。

答案 3 :(得分:0)

解决方案快速而简单,只需删除操作中的最后一个斜杠=&#34;&#34;表单标记的属性(仅在URL中)。

示例:

错误(IE)

<form action="http://mywebsite.com/something/">
</form>

<强> CORRECT

<form action="http://mywebsite.com/something">
</form>

仅在表单操作结束时删除斜杠=&#34;&#34;。

答案 4 :(得分:0)

在javascript处理程序中使用navigator.userAgent来识别浏览器并应用suiatble逻辑。与“CSS hack”相比,它是直截了当的。 您可以在此处参考http://www.useragentstring.com/pages/Internet%20Explorer/

IE的userAgent很可能会携带字符串MSIE(Miscrosoft internextExplorer或许:D)

基本上:

if(navigator.userAgent.indexOf('MSIE 7.0') > -1){
   /* Do watever suitable for IE7 here */ 
}else if(navigator.userAgent.indexOf('MSIE 8.0') >-1){
   /* Do watever suitable for IE8 here */ 
}else{
  /* The rest... */
}