我正在尝试删除侦听器定义中的事件侦听器:
canvas.addEventListener('click', function(event) {
click++;
if(click == 50) {
// remove this event listener here!
}
// More code here ...
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?这=事件......谢谢.
我有一个包含方法的对象.这些方法被放入匿名函数内的对象中.它看起来像这样:
var t = {};
window.document.addEventListener("keydown", function(e) {
t.scroll = function(x, y) {
window.scrollBy(x, y);
};
t.scrollTo = function(x, y) {
window.scrollTo(x, y);
};
});
Run Code Online (Sandbox Code Playgroud)
(还有更多代码,但这足以显示问题)
现在我想在某些情况下停止事件监听器.因此我试图做一个removeEventListener,但我无法弄清楚如何做到这一点.我在其他问题中已经读过,无法在匿名函数上调用removeEventListener,但在这种情况下是否也是如此?
我在匿名函数中创建了一个方法,因此我认为这是可能的.看起来像这样:
t.disable = function() {
window.document.removeEventListener("keydown", this, false);
}
Run Code Online (Sandbox Code Playgroud)
为什么我不能这样做?
还有其他(好的)方法吗?
奖金信息; 这只需要在Safari中工作,因此缺少即支持.
我意识到Firefox 对标签的点击事件<select>与Webkit/IE不同,我无法弄清楚为什么或如何解决这个差异.
具体而言,Webkit的/ IE将每个点击事件上<select> 作为组合两个点击"选择",和下拉的一个的点击<option>,在下面曲线图所示:
首先点击:

第二次点击:

在Webkit/IE中,只有在完成两次单击后才会触发click事件.
但是,在Firefox中,首次单击<select>标记被视为单击事件,第二次单击以选择<option>被视为另一个单击事件.因此,2个 点击事件已经在Firefox解雇比较一个 WebKit中/ IE进行同样的操作.
现在在代码示例中演示它,假设我们有:(JSfiddle link)
<select id="sel">
<option>one</option>
<option>two</option>
<option>three</option>?
</select>
<script>
function select() {
$("#sel").one("click", function(event) {
console.log('mouse down!');
$("#sel").one('click', function() {
console.log('mouse down again!');
$("#sel").off();
select();
});
});
}
$(document).ready(function() {
select();
});
</script>
Run Code Online (Sandbox Code Playgroud)
在Webkit/IE中,执行上图中所示的一组操作(第一次)将给出输出:
mouse down!
Run Code Online (Sandbox Code Playgroud)
在Firefox中,它将给出:
mouse down!
mouse …Run Code Online (Sandbox Code Playgroud)