JavaScript:分配事件处理程序时遇到麻烦

时间:2010-02-18 15:21:17

标签: javascript xhtml event-handling

我不确定我在这里做错了什么:

的index.html

<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "XHTML1-s.dtd" >
<html xmlns="http://www.w3.org/TR/1999/REC-html-in-xml" xml:lang="en" lang="en" >

<head>
    <script type="text/javascript" src="scripts/eventInit.js"></script>
</head>
<body>
<p id="javascriptWarning">This page will not work with JavaScript disabled.</p>
</body>
</html>

eventInit.js

window.onload = function () {
    alert("check"); // works
    var jsWarning = document.getElementById("javascriptWarning");
    jsWarning.onclick = function () {
        alert("hi"); // works
    };
    jsWarning.onload = function () {
        alert("loaded"); // fails
    };
}

然而,没有任何反应。我究竟做错了什么?我尝试过其他活动,例如onmouseoveronload

我在Visual Studio中这样做,并且intellisense没有为我提供设置任何事件处理程序的选项。那是因为我做错了吗?

我已经确认JS正在进行我的设置;只需将alert("hi")放入脚本中并包含它就可以了。

重要的是要注意我在JScript中这样做,因为我使用的是Visual Studio 2010,所以事件处理可能不同吗?

已更新以从ID名称中删除“ - ”,但它仍无效。

更新添加了window.onload块。现在onclick有效,但onload没有。

8 个答案:

答案 0 :(得分:1)

也许你忘了将代码块放在

window.onload = function() {
          // btn click code here 
  }

答案 1 :(得分:1)

  1. 您必须等待解析文档,然后才能按“id”值查找元素。将事件处理设置放在窗口对象上的“onload”函数中。
  2. 浏览器不会在<p>标记上触发“onload”事件。如果你在整个窗口的“onload”处理程序中完成工作,那么你无论如何都不需要。
  3. [soapbox]使用框架。

答案 2 :(得分:1)

脚本在所需元素存在之前执行。另外,我不认为,p有一个onload - 事件。 Windows,框架和图像,是的,但段落?

如果您使用库,则应使用<body onload="init();">window.onload=function(){ … }或库函数。例如:

<强>的index.html

<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "XHTML1-s.dtd" >
<html xmlns="http://www.w3.org/TR/1999/REC-html-in-xml" xml:lang="en" lang="en" >
<head>
<script type="text/javascript" src="scripts/eventInit.js"></script>
</head>
<body>
<p id="javascriptWarning">This page will not work with JavaScript disabled.</p>
</body>
</html>

<强>脚本/ eventInit.js

window.onload=function(){
  alert('JS is working!');}

编辑:好的,我非常确定,p不使用onload事件处理程序。毫无疑问,你不需要它。如果要在段落完成后执行JS代码,请执行以下操作:

<p>
<!-- stuff -->
</p>
<script type="text/javascript">
/* stuff */
</script>

答案 3 :(得分:1)

而不是:

jsWarning.onload = function () {
        alert("loaded"); // fails
    };

试试这个

if(jsWarning) alert("loaded");

我认为上面提到过检查元素是否存在。在这个阶段,元素应该存在,但检查它没有任何危害。

答案 4 :(得分:1)

您正尝试在段落上设置加载事件。只有加载外部数据的对象(窗口,框架,iframe,img,脚本等)才会出现加载事件。

有些JS库实现了一个可用的事件(例如YUI) - 但你知道段落是可用的,因为你在它上面设置了一个事件,而你却不能如果它不可用那就这样做。

答案 5 :(得分:0)

我认为您必须确保您的JavaScript具有约束力。

你的段落元素之前或之后的javascript,出于某种原因我的大脑是针对那个。

我会考虑使用类似jQuery的东西,它会有所帮助。

使用jQuery你的代码将是(当然包含相关的jQuery文件)

$(document).ready(function()
{
    $("#javascript-warning").click(function(){
        alert("HELLO");
    });
});

答案 6 :(得分:-1)

与JavaScript一起使用时,我认为连字符在类名中无效。请尝试使用下划线。

答案 7 :(得分:-1)

onload是一个窗口事件。