如何在IE8中的jQuery ajax加载内容中启动javascript

时间:2010-12-16 15:59:18

标签: php jquery ajax internet-explorer

我在IE8下遇到了jquery ajax的问题​​。我有一个表单,它在基本级别显示一些项目列表,每个项目都有编辑和删除按钮。该列表以及这两个按钮是通过jquery ajax调用加载的。虽然它在Firefox和Chrome上运行良好,但在IE8上它不会触发编辑或删除按钮后的功能。

所以基本上,在基页上,jquery工作并加载列表。在该列表中,jQuery不起作用,因为它不会触发编辑或删除函数

我对模态窗口调用有类似的问题。 IE8能够打开模态窗口(内容加载了jquery ajax)但不会触发模态内容中的任何函数

简单电话的示例

$('#form-modal').load('/form/' + path + '?id=' + id).modal(); 

这适用于基本页面上的IE8,但在ajax加载的内容中触发时不会

所有js脚本定义都在主基页的<head>中加载。我尝试在ajax加载的文件头中添加定义,但没有帮助,所以它必须是其他东西

有什么想法吗?如果您需要更多细节,请高兴地提供


让我告诉你最简单的例子。列表中装有ajax的每个项目都有一个“删除”按钮。

<a href="#" onclick="deleteItem('itemId')">Remove</a>

DeleteItem定义位于外部lib.js文件中

function deleteItem(id){

            $.ajax({
               type: "POST",
               url: "/ajax/deleteitem.php",
               data: "id=" + id,
               success: function(msg){
               loadItemsList();
               }
            });
}           

这就是它...这根本不适用于IE8 ......没有任何反应,甚至没有javascript错误。同样的事情在Firefox和Chrome上没有问题

1 个答案:

答案 0 :(得分:2)

如果你显示那些按钮的事件处理程序会很好,因为如果你使用bind();例如,它在dom准备就绪时加载,并进行ajax调用。这意味着当调用bind来绑定按钮时,通过ajax调用加载的dom元素不存在。

解决方法是使用live();

$(".button").live("click", function () {
  // do stuff
});

我不知道你正在使用什么事件活页夹,但如果你使用的不是现场活动,你可以试试看它应该有效。

修改

首先在警报(id)上阅读我的评论,如果您的功能在IE8中根本没有运行,请尝试这样做。给link元素添加id,就像这样

<a id="item_10" href="#">Remove</a>

然后在你的javascript中的某个地方

$("document").ready( function () {
   $("a").live("click", deleteItem);
});

function deleteItem (event) {
   event.preventDefault();
   var id;
   id = $(this).attr("id").replace("item_", "");

   //this will now provide you with the current id
   console.log(id);

   your ajax-stuff here..

}

这应该在IE8中工作,没问题。您可能希望为click事件指定选择器,方法是为所有删除链接提供某些类或其他内容。