在事件中更改事件时如何停止传播?

时间:2018-04-21 23:13:22

标签: javascript

所以我有以下javascript代码:

function showSearch() {
    var ev = new Event("onkeydown");
    ev.keyCode = 13;
    document.getElementById("search").onclick = search(ev);
}

showSearch() - 元素onclick的事件中调用函数#search。因此,在分配新事件时,新事件会立即触发。

我想使用stopPropagation()来防止这种情况。

我该怎么做?我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:1)

onclick接受函数作为参数 - 您提供undefinedshowSearch()的结果;您当前的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>