青衫叱咤
alert是window对象下方法,这样写默认页面加载就触发了
qq_縯绎那平凡_03287663
智商是硬伤,这个是最基本的概念,没获取到btn2元素怎么会执行后面的函数
qq_新爷_0
getElementByid写错了,是getElementById;
ekberrr
你将js写在body前面会导致 btn还没有生成的时候 js就调用了 这时候找不到BTN对象 就报错了 将js放到body后面书写即可
<!DOCTYPE html>
<html>
<head>
<title>button</title>
</head>
<body>
<div>
<input type="button" value="aaa" id="btn" />
</div>
</body>
<script>
var bt = document.getElementById('btn');
bt.onclick = function(){
alert('hhh');
}
</script>
</html>
山巅对弈
简言之,你把script标签放在<head>里,加载页面时会先加载,而那时你还没有点击按钮,就是没有click这个事件发出,而当页面全部加载完毕,你需要click时,却无法查到对应的事件及事件处理程序,因为没有用HTML级事件处理程序,无法从script里查找对应的方法。
gary_Chen
我只知道不一定用匿名函数
JQuery_DOM
因为浏览器是从上到下从左到右读取和显示html文档,如果不加window.onload的情况下把<script>标签写在<input>标签之前,比如我要var btn=document.getElementById('btn')获取到id名为“btn”的这个input元素,
这时input标签在下面浏览器还没有读取到input标签,浏览器就会报错。
qq_若相惜卟弃_3
onclick的c小写
Erkeleteyin
懂了, 哈哈 加载顺序不同,
rainy_li3676598
<title>无标题文档</title>
</head>
<body>
<input type="button" value="按钮" id="btn">
<script>
var btn=document.getElementById("btn");
btn.onclick=function() { alert("no");}
</script>
</body>
或者
<script>
function showmes() { alert("no");}
</script>
<title>无标题文档</title>
</head>
<body>
<input type="button" value="按钮" id="btn" onclick="showmes()">
</script>
</body>
上面这两个都能正常跳出弹框
阳灵鸟
事件流是描述页面接收事件的顺序。
具体的有事件冒泡事件捕获DOM事件流。
1、事件冒泡又叫IE的事件流,即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档)。
2、事件捕获的思想是不太具体的节点应该更早的接收到事件,而最具体的节点应该在最后接收到节点。事件捕获的用意在于事件到达预定目标之前捕获它。
3、DOM2级事件流规定的事件流包括三个阶段:事件捕获阶段、处于目标阶段和冒泡阶段。首先发生的是事件捕获,为截获事件提供了机会。然后是实际的目标接收到事件。最后一个阶段是冒泡阶段,可以在这个阶段对事件作出响应。
风骚小王子
DOM分为0级和2级,具体差异请百度
qq_一台设备两种生活_0
可以运行啊,你在哪个浏览器不能运行?
做过坏小孩
btn2.onclick=showMes();把showMes后面的括号去掉
玄鉴
匿名函数的用法
jicheng
一墨飞雪
如果你的id没有写错的话,很可能是在执行getElementById的时候 btn2还没有创建出来,你可以像下面这样写。
window.onload = function() {
//... 写上你的代码
}
qincai
js写在前面,有可能DOM没有加载完成。一是把js代码写在body最后,二是用
window.onload = function() {
function showMes(){
alert("Hello World");
}
var btn2=document.getElementById("btn2");
btn2.onclick=function(){
alert("这是DOM0级添加的事件")
}
}
CrazyEfan
首先,你的alert("DOM事件0级处理!")后用的是中文的分号;
其次,第二个按钮要生效,你要把js代码放在html代码中按钮2的后面,因为js代码在你的浏览器读取按钮2的html代码之前就已经编译了
以下是修改后的:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>DOM事件</title>
</head>
<body>
<input type="button" value="按钮" onclick="showx()">
<input type="button" value="按钮2" id="btn2">
<script>
function showx() {
alert("hello");
}
var btx=document.getElementById('btn2');
btx.onclick=function () {
alert("DOM事件0级处理!");
};
</script>
</body>
</html>
榎目贵音
可以删除啊,但是第一点,课程是为了给你展示设置null的效果,第二呢,你如果把function删除了,以后想用的时候还要重新写
我要吃冰激凌
补充一下:如果对一个元素需要添加2个或2个以上的同类型事件的话,dom0级和内联事件是不可以的,所以要用dom2级。
栄篱
btn.onclick=showM();去掉括号,不然就变成传函数返回值了
LvNine
经过多次试验,找到错误了,我加那括号多余了,直接写函数名就成功了。
wanoneQ
看下代码是否有错误,标点是不是中文状态下输入的
liBUGren
荔枝小时
放在head部分,已赋值,但由于dom树未生成,没有抓取到id,所以赋值给变量 null值。
ZAnsder
JS先一步在HTML文档之前被读取了,于是就找不到对应的元素,放在<head>里的话要在JS代码的外面加上一个 window.onload = function(){ },然后再把JS代码放在这个函数里
萌萌哒野怪
可以直接改得啊 他默认的有很多啊
向我开枪
慕运维5178013
你可以看下 DOMReady 可能是DOM树还没构建完毕,所以无效。
你可以尝试在整个script 中加上 window.onload = function(){
//这里是你的js 代码
}