8

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

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

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

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

如果它们在页面加载时已经存在但在我追加时不存在,它们可以正常工作。

你建议我怎么做?是否需要对 DOM 进行某种排序请求以在追加后重新解释 JavaScript?

编辑:

只是更多信息,我遇到了这个问题,因为我正在向数据库添加一些带有 AJAX 的东西,并且成功后我将 html 附加到它需要的位置。有点像 SO 对评论的处理方式。

编辑2:

即使有所有关于它的讨论,感谢您的回答,让它工作。

4

5 回答 5

4

我会这样做:

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

<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)之类的东西很好,因为它处理了跨浏览器的兼容性。

于 2009-03-03T20:38:37.133 回答
3

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

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

如果您使用的是原型之类的库,它会简单得多,因为您可以将响应传递给 evalScripts() 方法。

于 2009-03-03T20:38:06.620 回答
1

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

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

IE:

Object.onclick = someFuntion

法郎:

Object.addEventListener('click', someFunction);
于 2009-03-03T20:31:49.257 回答
0

应该使用addEventListener('click', /*...*/)而不是在 innerHTML 或其他任何内容中设置 onclick。

IEaddEventListener完全调用了其他东西,因此您也必须对此进行补偿。

(编辑:IE 称之为attachEvent()。希望这有一些用处。)

于 2009-03-03T20:37:31.067 回答
0

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

于 2009-03-03T20:48:33.223 回答