javascript onmouseover和onmouseout事件在页面加载时触发,而不是在事件上触发

yeotifhr  于 2023-03-16  发布在  Java
关注(0)|答案(1)|浏览(149)

下面的代码:

var statusList = document.createElement('ul'); //I am populating this list elsewhere
statusList.style.display = 'none';
var statusSpan = document.createElement('span');
statusSpan.onmouseover = mapControlHover(statusList);
statusSpan.onmouseout = mapControlNoHover(statusList);

function mapControlHover(element) {
  element.style.display = 'block';
}

function mapControlNoHover(element) {
  element.style.display = 'none';
}

这两个事件都是在页面加载时触发的(它们不应该这样做)。onmouseoveronmouseout都没有触发。
答案中请不要包含jQuery。

sd2nnvve

sd2nnvve1#

是的,这是因为您正在调用事件

statusSpan.onmouseover = mapControlHover(statusList);

您应该只传入事件处理程序函数引用。

statusSpan.onmouseover = mapControlHover

以及

function mapControlHover() {
  statusList.style.display = 'block'; //access statusList directly here.
}

您也可以使用function.bind,有关支持和IE〈9的多边形填充,请参见

statusSpan.onmouseover = mapControlHover.bind(statusSpan, statusList);

和访问

function mapControlHover(element) {
  element.style.display = 'block'; 
}

相关问题