2014-01-10 63 views

回答

0

table取出onclick它作为onload添加到body

DEMO

或者,你可以使用window.onload,而不是把它直接在body

DEMO

0

问题是你有一个n onclick附加到调用setTDOnclickEvents的表上。所以,只有当用户点击表格时,才会出现onclick。

你真正想要的是在页面加载时绑定表格中的元素。使用jQuery你可以做...

$(function() { 
setTDOnclickEvents(); 
}); 
+0

没有jQuery(就像这里),你只需写'document.onload = setTDOnclickEvents' – Rolf

0

更换

<body> 

通过

<body onload="setTDOnclickEvents()"> 

还有其他的方法来做到这一点,就像你可以只写:

document.onload = setTDOnclickEvents; 

您的JavaScript

你需要将你的函数绑定到一个事件上,如果它在头部内部,它就会被触发。

我希望你的代码根本不能工作,奇怪的是它的确如此。也许一些默认的行为,不值得调查......

PS:我刚刚看到你正在为表格添加click事件,所以这会解释奇怪的行为。是的,删除它。

0

问题是,您在点击表格元素时调用setTDOnclickEvents()。因此,在第一次点击之前,您并未附加点击事件。

相反,您可以将其移入正文onload属性中。

您可以对此代码进行一些其他改进,以使其更简单和更新。如果有兴趣,请告诉我,我很乐意提供帮助。

+0

干杯! thnx :) – user3183024

1

移动你脚本标签到HTML的身体结束,并从标签去除的onclick处理。此作品(这里的jsbin):

<script> 
    document.getElementsByTagName('table')[0].onclick = setTDOnclickEvents(); 

    function setTDOnclickEvents() { 
     var allTDs = document.getElementsByTagName("TD"); 
     for (var i in allTDs) { 
      allTDs[i].onclick = function() { 
       txtCellData.value = this.innerHTML; 
      } 
     } 
    } 
</script> 

另一种选择(而不是调用基于一个点击你的函数)是简单地做到这一点:

<script> 
     var allTDs = document.getElementsByTagName("TD"); 
     for (var i in allTDs) { 
      allTDs[i].onclick = function() { 
       txtCellData.value = this.innerHTML; 
      } 
     } 
</script> 

另一种选择是(如果你想要使用文件头中的脚本),把所有内容都作为window.onload

此外,通常尝试避免依赖于将事件处理程序放入HTML元素本身中,而是在JavaScript内处理所有这些东西。

+0

我还考虑将您的脚本移出HEAD,并在BODY结束时作为不良练习。 – Rolf

+0

你的推理是什么? –

+0

更直觉然后推理,但我的直觉通常帮助我。它确实保留了HEAD中的所有“元数据”,这是我猜的HEAD。我认为,如果内联JavaScript是坏的,那么这应该也是如此,毕竟它不是*,远远超过内嵌JavaScript在一个块中连接... – Rolf

相关问题