所以我有以下javascript代码:
function showSearch() {
var ev = new Event("onkeydown");
ev.keyCode = 13;
document.getElementById("search").onclick = search(ev);
}
在showSearch()
- 元素onclick
的事件中调用函数#search
。因此,在分配新事件时,新事件会立即触发。
我想使用stopPropagation()
来防止这种情况。
我该怎么做?我怎么能解决这个问题?
答案 0 :(得分:1)
onclick
接受函数作为参数 - 您提供undefined
(showSearch()
的结果;您当前的showSearch()
,作为函数调用,立即执行。分配onclick
函数而不是函数调用:
document.getElementById("search").onclick = showSearch;
const search = () => console.log('searching');
function showSearch() {
var ev = new Event("onkeydown");
ev.keyCode = 13;
document.getElementById("search").onclick = () => search(ev);
}
<div id="search">text</div>
但是使用on
- 处理程序是非常糟糕的做法。最好添加一个事件监听器:
const searchDiv = document.getElementById("search");
searchDiv.addEventListener('click', showSearch);
const search = () => console.log('searching');
function showSearch() {
var ev = new Event("onkeydown");
ev.keyCode = 13;
searchDiv.removeEventListener('click', showSearch);
searchDiv.addEventListener('click', () => search(ev));
}
<div id="search">text</div>