包含javascript的附加HTML无法运行,如何让它运行?

时间:2009-03-03 20:28:59

标签: javascript html dom dom-manipulation

我正在添加一些包含javascript的HTML。

<td onclick="toggleDay('+data+',this,\'tue\');">T</td>

<img src="img/cross.png" onclick="deleteAlarm('+data+');">

这两段代码都包含在我附加的大量HTML中。

如果页面加载时它们已经存在,那么它们可以正常工作,但是当我正在追加时它们没有。

你建议我做什么?是否需要一些排序请求让DOM在追加后重新解释JavaScript或?

编辑:

还有一些信息,我遇到了这个问题,因为我在数据库中添加了一些AJAX的东西,并且在成功时我将html附加到它需要的位置。有点像SO对评论的做法。

EDIT2:

即使进行了所有关于它的讨论,也要感谢答案,让它发挥作用。

5 个答案:

答案 0 :(得分:4)

我会这样做:

首先在您的html中添加id属性:

<td id="toggleDayCell">T</td>

<img src="img/cross.png" id="crossImg">

然后让Javascript在页面的onload事件上运行并附加到您感兴趣的事件上。

PrototypeJS中,它可能如下所示:

Event.observe(window, 'load', function(){
  if( $('toggleDayCell') ) {
    Event.observe( $('toggleDayCell'), 'click', function(event){
      //do stuff here
    }
  }

  if( $('crossImg') ) {
    Event.observe( $('crossImg'), 'click', function(event) {
       //do stuff here
    }
  }
});

使用Prototype(或jQuery)之类的东西很不错,因为它可以兼顾跨浏览器的兼容性。

答案 1 :(得分:3)

您是否通过AJAX追加HTML?如果是这样,您将不得不手动eval()返回的JavaScript。您可以将响应包装在div中并执行以下操作:

wrapper.getElementsByTagName("script")
// for script in wrapper...
eval(script.innerHTML)

如果您正在使用类似原型的库,那么将更简单,因为您可以将响应传递给evalScripts()方法。

答案 2 :(得分:1)

将HTML附加到文档,然后以编程方式将onclick事件添加到对象。

这不是我的头脑,但......我认为你可以这样做:

IE:

Object.onclick = someFuntion

FF:

Object.addEventListener('click', someFunction);

答案 3 :(得分:0)

应该使用addEventListener('click', /*...*/)而不是在innerHTML中设置onclick等等。

IE完全调用addEventListener其他内容,因此您也必须对此进行补偿。

(编辑:IE称之为attachEvent()。希望这是有用的。)

答案 4 :(得分:0)

AJAX有一些怪癖......尤其是IE。示例:您不能使用innerHTML属性在表元素中插入/更新任何内容(在IE中)。最好使用DOM函数来插入/更新/删除元素节点(或添加事件处理程序)。您可以使用提到的eval()函数来运行使用DOM对象修改文档的动态加载的javascript。