addEventListener
和之间有什么区别onclick
?
var h = document.getElementById("a");
h.onclick = dothing1;
h.addEventListener("click", dothing2);
Run Code Online (Sandbox Code Playgroud)
上面的代码一起存在于一个单独的.js文件中,它们都完美地工作.
我已将事件附加到文本框中addEventListener
.它工作正常.当我想以编程方式从另一个函数触发事件时,我的问题出现了.
我该怎么做?
情况有点像 -
var someVar = some_other_function();
someObj.addEventListener("click", function(){
some_function(someVar);
}, false);
Run Code Online (Sandbox Code Playgroud)
问题是someVar
在侦听器函数内部的值是不可见的addEventListener
,它可能被视为一个新变量.
我有一个按钮,我添加了一些eventlistners
:
document.getElementById("btn").addEventListener("click", funcA, false);
document.getElementById("btn").addEventListener("click", funcB, false);
document.getElementById("btn").addEventListener("click", funcC, false);
document.getElementById("btn").addEventListener("blur" , funcD, false);
document.getElementById("btn").addEventListener("focus", funcE, false);
<button id="btn">button</button>
Run Code Online (Sandbox Code Playgroud)
我可以删除它们:
document.getElementById("btn").removeEventListener("click",funcA);
Run Code Online (Sandbox Code Playgroud)
如果我想要立即删除所有侦听器,或者我没有函数reference(funcA
),该怎么办?有没有办法做到这一点,或者我必须逐个删除它们?
我想在文档加载后调用函数,但文档可能已经或可能尚未完成加载.如果它加载了,那么我可以调用该函数.如果它没有加载,那么我可以附加一个事件监听器.我无法在onload已经触发后添加一个eventlistener,因为它不会被调用.那么如何检查文档是否已加载?我尝试了下面的代码,但它并不完全有用.有任何想法吗?
var body = document.getElementsByTagName('BODY')[0];
// CONDITION DOES NOT WORK
if (body && body.readyState == 'loaded') {
DoStuffFunction();
} else {
// CODE BELOW WORKS
if (window.addEventListener) {
window.addEventListener('load', DoStuffFunction, false);
} else {
window.attachEvent('onload', DoStuffFunction);
}
}
Run Code Online (Sandbox Code Playgroud) 在使用浏览器事件时,我已经开始将Safari的touchEvents用于移动设备.我发现addEventListener
s正在堆积条件.这个项目不能使用JQuery.
标准事件监听器:
/* option 1 */
window.addEventListener('mousemove', this.mouseMoveHandler, false);
window.addEventListener('touchmove', this.mouseMoveHandler, false);
/* option 2, only enables the required event */
var isTouchEnabled = window.Touch || false;
window.addEventListener(isTouchEnabled ? 'touchmove' : 'mousemove', this.mouseMoveHandler, false);
Run Code Online (Sandbox Code Playgroud)
JQuery bind
允许多个事件,如下所示:
$(window).bind('mousemove touchmove', function(e) {
//do something;
});
Run Code Online (Sandbox Code Playgroud)
有没有办法像JQuery示例中那样组合两个事件侦听器?例如:
window.addEventListener('mousemove touchmove', this.mouseMoveHandler, false);
Run Code Online (Sandbox Code Playgroud)
任何建议或提示表示赞赏!
我正在使用keypress
听众,例如......
addEventListener("keypress", function(event){
}
Run Code Online (Sandbox Code Playgroud)
但是,这似乎没有检测到删除文本的退格...
我可以使用不同的侦听器来检测这个吗?
我动态创建了一个复选框.我曾经addEventListener
在点击复选框时调用了一个函数,该复选框适用于Google Chrome和Firefox,但在Internet Explorer 8中不起作用.这是我的代码:
var _checkbox = document.createElement("input");
_checkbox.addEventListener("click", setCheckedValues, false);
Run Code Online (Sandbox Code Playgroud)
setCheckedValues
是我的事件处理程序.
document.getElementById('container').addEventListener('copy',beforecopy,false );
Run Code Online (Sandbox Code Playgroud)
在Chrome/Safari中,当复制页面上的内容时,上面将运行"beforecopy"功能.MSIE也应该支持这个功能,但出于某种原因我收到了这个错误:
"对象不支持此属性或方法"
现在,我的理解是Internet Explorer不会使用body节点,但我认为通过ID提供节点可以正常工作.有没有人对我做错了什么有任何想法?提前致谢.
**任何能告诉我第三个参数"False"有用的人的奖励积分.
有人可以解释一下这段 JavaScript 代码的程序流程:
const $leaveRoom = document.querySelector('#leave-button');
let a = 1;
$leaveRoom.addEventListener('click', () => {
console.log(a);
console.log("check");
a++;
$leaveRoom.click();
console.log(a);
a++;
});
Run Code Online (Sandbox Code Playgroud)
<button id="leave-button">Leave Room</button>
Run Code Online (Sandbox Code Playgroud)
The Output was:
1
check
2
check
3
4
Run Code Online (Sandbox Code Playgroud)
这个问题可能听起来很愚蠢,但我是 JavaScript 的新手。我无法理解这段代码的程序流程。我想知道我是如何在输出中得到 3 & 4 的。
addeventlistener ×10
javascript ×10
events ×2
dom ×1
dom-events ×1
html ×1
jquery ×1
keypress ×1
onclick ×1
onload ×1
touch ×1
triggers ×1