在 ajax 发布之后,附加的 div 不在 IE 8 中显示

Posted

技术标签:

【中文标题】在 ajax 发布之后,附加的 div 不在 IE 8 中显示【英文标题】:After ajax post, appended div not displaying in IE 8 【发布时间】:2012-05-26 07:36:51 【问题描述】:

我正在将数据发布到我的网络服务器并返回成功或失败状态。我想在 ajax 发布后向用户显示确认或错误消息。它在 Chrome 和 IE 9 中按预期工作,但 IE 8 不会显示新附加的div,这是我的确认消息。

使用 IE 8 的 DOM 检查器,我发现 div 元素实际上被附加到 DOM,但只是没有显示。在我附加元素后,也许 IE 没有得到某种屏幕刷新事件?我使用$.getJSON() 在我的代码中的其他地方在ajax 回调函数中附加DOM 元素——似乎IE 正在查看POST 方法并决定不让我更新DOM。

我的 ajax 代码如下所示:

$.post("adminpage.ashx?action=newAccount", newData, function (response) 
      getAccount(newData.accountNum);   // display the new account
      if (response == "success") 
          createAlert("Account was successfully updated.", "success").appendTo(".container");
       else if (response == "error") 
          createAlert("There was an error updating the account.", "error").appendTo(".container");
      
);

createAlert() 返回带有我的确认或错误消息的 div。

提前致谢。

编辑:这是我的 createAlert 函数的代码:

function createAlert(message, type) 
    var alert = $("<div>");
    alert.addClass("alert alert-block");
    if (typeof type != "undefined") 
        alert.addClass("alert-" + type);
    

    var dismissButton = $("<button>");
    dismissButton.addClass("close").attr("data-dismiss", "alert").text("x");
    dismissButton.appendTo(alert);

    var alertText = $("<p>");
    alertText.text(message);

    alert.append(message);

    return alert;

以及 IE 8 的调试器显示的 html

<DIV class="alert alert-block alert-success">
    <BUTTON class=close type=submit data-dismiss="alert">x</BUTTON>Account was successfully updated.
</DIV>

【问题讨论】:

对我来说听起来像是一个CSS问题,我们可以看到createAlert("test", "success")生成的html吗? 我同意@KevinB,但这也可能是 HTML 问题。 IE 8 实际上比任何其他浏览器(甚至 IE 9)都更严格地坚持 HTML 标准。因此,例如,您不能将&lt;form&gt; 放在另一个&lt;form&gt; 中,也不能将&lt;div&gt; 放在&lt;span&gt; 中等等。这个.container 的标签是什么? @KevinB @David 我已将代码添加到我的问题中。容器是&lt;div&gt;,它的父级是&lt;body&gt; 如果我开始在我的自动完成框中输入,稍后会奇怪地显示警报。在我看来,将自动完成框附加到 DOM 会触发必要的屏幕刷新,而在 AJAX 发布后没有触发。 【参考方案1】:

我遇到了类似的问题,但我最终通过使用变体函数而不是编写来让它工作

  someObj.appendTo('.blabla');

我写了

 $('.blabla').append(someObj);

如果你想尝试

$.post("adminpage.ashx?action=newAccount", newData, function (response) 
  getAccount(newData.accountNum);   // display the new account
  if (response == "success") 
      $(".container").append(createAlert("Account was successfully updated.", "success"));
   else if (response == "error") 
      $(".container").append(createAlert("There was an error updating the account.", "error"));
  
);

【讨论】:

以上是关于在 ajax 发布之后,附加的 div 不在 IE 8 中显示的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 消息被跳过到不在所需 div 元素上的 url 页面

jquery克隆div并将其附加在特定div之后

第二个ajax结果没有附加到我的div

.html 工作,但 ajax 请求后不出现文本

IE+jQuery+Ajax+XHTML:HTML 在 .html() 或 .innerHTML 之后被剪切

解决在IE11浏览器下,JQuery的AJAX方法不响应问题