为什么我的javascript鼠标事件没有启动
Why does my javascript mouse event not fire?
以下是我认为简单的代码:
<html>
<head>
<script>
function Foobar(id) {
self = this;
self.id = id;
self.canvas = document.createElement('canvas');
self.canvas.style.border = '1px solid black';
document.body.appendChild(self.canvas);
self.canvas.addEventListener('mousedown', self.onMouseDown, true);
self.onMouseDown = function(e) {
console.log(self.id);
}
}
var s1, s2;
function onLoad() {
s1 = new Foobar(1);
s2 = new Foobar(2);
}
</script>
</head>
<body onload='onLoad()'>
</body>
</html>
为什么控制台没有弹出id号?
这是一把小提琴:http://jsfiddle.net/VRn7v/
在绑定事件列表之前,必须在self
上分配方法
固定
http://jsfiddle.net/landau/VRn7v/3/
self
是window
对象的一个属性,通常是一个错误的变量名。此外,您的self
变量是一个隐式全局变量,因为您缺少var
关键字。最后,在声明事件处理程序之前对其进行绑定。
function Foobar(id) {
var that = this; // pick a better name, and use "var"
that.id = id;
that.canvas = document.createElement('canvas');
that.canvas.style.border = '1px solid black';
document.body.appendChild(that.canvas);
that.onMouseDown = function(e) {
console.log(self.id);
}; // missing semicolon
// bind the handler after declaring it
that.canvas.addEventListener('mousedown', that.onMouseDown, true);
}
self.canvas.addEventListener('mousedown', self.onMouseDown, true);
在这一行中,self.onMouseDown
是undefined
,因为您只在之后分配它。可能的快速修复:
- 将函数创建/分配移到用法之上
- 将
onMouseDown
函数移动到原型(错误,作用域中没有本地self
) - 不使用
self.onMouseDown
,而是使用self.canvas.onmousedown
(使用传统事件注册的跨浏览器安全)
此外,您的self
变量是全局的。使用工作处理程序附件,两次单击都将记录"2"
。而且,在大多数使用self
变量的地方都不需要它——只需要在事件处理程序中使用它。
修正小提琴:http://jsfiddle.net/VRn7v/2/
相关文章:
- 从控制器返回后Ajax启动事件激发
- 触摸启动事件未在iframe iOS 6中启动
- preventDefault之后的重新启动事件
- 如何获取在一系列事件中启动事件的元素
- 当窗口打开时,IE9在加载前启动事件
- 我的 JS 代码中的会话启动事件
- 仅当前一个事件完全完成时,才启动事件
- jQuery UI - 如何区分拖动/调整大小启动事件和单击事件
- Javascript “卡住”键(未注册的键启动事件)
- pace.js:“启动”事件未触发
- 在第一次触摸启动事件时禁用所有点击事件是个好主意吗?
- 如何将“拖动启动”事件与 CKEditor 实例分离
- 触摸启动事件上的Javascript触发函数
- 绑定到触摸启动事件,导致自动对焦集中在Mobile Safari中的任何单击上
- 触摸启动事件未在原来隐藏的按钮上工作
- 有没有一种方法可以使触摸启动事件不会触发点击事件
- 检测浏览器窗口是否处于活动状态,并在窗口再次处于活动状态后启动事件[JavaScript]
- 如何检测浏览器是否支持手势启动事件
- 首先启动事件,然后转到url
- 在IE7中无法捕获鼠标启动事件