gpt4 book ai didi

javascript - onmousemove 事件未触发

转载 作者:太空狗 更新时间:2023-10-29 15:50:58 25 4
gpt4 key购买 nike

我搜索了本博客和其他博客中提供的答案,但没有找到任何解决方案。非常感谢您的帮助。

我有一个 onmousemove 事件,它正在执行要触发的事件列表中的第一项,但不会执行第二项。 document.getElementById("map_image_africa").onmousemove = maps.redraw; learnPanel.redraw;

这个问题似乎不是特定于浏览器的;它发生在 Chrome 和 Safari 中。还没有尝试过 Firefox。

在 Chrome 中,我可以打开浏览器的控制台并执行 learnPanel.redraw();,它会按预期工作。此外,如果我在 onmouseover 事件中的 maps.redraw 和 learnPanel.redraw 语句之间放置一个警报语句,警报将按预期执行。

learnPanel 对象是用下面的代码创建的

        LearnPanel.prototype = new Panel();
LearnPanel.prototype.constructor = LearnPanel;
function LearnPanel() {
}
LearnPanel.prototype.draw = function() {

var br_element = document.createElement("br");


/* country name */
if(this.isCountryNamesSelected === "yes") {
var temp_label;
temp_label = document.createElement("label");
temp_label.classList.add('quiz_question_heading_label');
temp_label.innerHTML = "Country: ";

this.flagColumnTab.appendChild(temp_label);

this.labelCountryName = document.createElement("label");
this.labelCountryName.id = "country_name";
this.labelCountryName.classList.add('quiz_question_label');

this.flagColumnTab.appendChild(this.labelCountryName);
this.flagColumnTab.appendChild(document.createElement("br"));

}
/* capital */
if(this.isCapitalNamesSelected === "yes") {
var temp_label;
temp_label = document.createElement("label");
temp_label.classList.add('quiz_question_heading_label');
temp_label.innerHTML = "Capital: ";

this.flagColumnTab.appendChild(temp_label);

this.labelCapitalName = document.createElement("label");
this.labelCapitalName.id = "capital";
this.labelCapitalName.classList.add('quiz_question_label');

this.flagColumnTab.appendChild(this.labelCapitalName);
this.flagColumnTab.appendChild(document.createElement("br"));

}
/* flag */
if(this.isCountryFlagsSelected === "yes") {

this.flagImage = document.createElement("img");
this.flagImage.id = "flag_image";
this.flagImage.src = "/images/flags/_flag.jpeg";
this.flagImage.alt = "flag logo";

this.flagColumnTab.appendChild(this.flagImage);

this.flagColumnTab.appendChild(document.createElement("br"));
this.flagColumnTab.appendChild(document.createElement("br"));

}


}
LearnPanel.prototype.redraw = function() {


alert('redrawing learnPanel');
/* country name */
if(learnPanel.isCountryNamesSelected === "yes") {
learnPanel.labelCountryName.innerHTML = maps.getCurrentDisplayCountryDown();
}
/* capital */
if(learnPanel.isCapitalNamesSelected === "yes") {
learnPanel.labelCapitalName.innerHTML = maps.getCurrentCountryCapitalDown();
}
/* flag */
if(learnPanel.isCountryFlagsSelected === "yes") {
learnPanel.flagImage.src = "/images/flags/" + maps.getCurrentFlagDown() + "_flag.jpeg";
learnPanel.flagImage.alt = "flag of " + maps.getCurrentFlagDown();
}
/* head of state */
/* famous landmark */

}


learnPanel = new LearnPanel();

在此先感谢您的帮助!

最佳答案

欢迎使用 StackOverflow!

您在这里需要的是一个匿名函数。当您为 #map_large_africa 上的 mousemove 属性分配函数时,您希望出现两个不同的函数。不幸的是,由于您编写以下语句的方式:

`document.getElementById("map_image_africa").onmousemove = maps.redraw; learnPanel.redraw;`

实际上是这样解析的:

document.getElementById("map_image_africa").onmousemove = maps.redraw;

learnPanel.redraw;

你看到问题了吗?分号作为命令的结尾。 map 在 mousemove 上重新绘制,但 learnPanel.redraw 不是 onmousemove 赋值的一部分,并且该行仅在 onmousemove 之后执行一次> 属性分配给 #map_image_africa。通过将其包装在 anonymous function 中,您可以一次执行多行 javascript。

尝试以下操作:

document.getElementById("map_image_africa").onmousemove = function() {
maps.redraw(); // note that these lines have () after the method name.
learnPanel.redraw();
}

虽然我有你,但请注意,不鼓励直接修改 onmousemoveonclick 等属性,并且 Events 是与 DOM 元素交互的首选方式,因为它将 javascript 与 HTML 分开。

上面的 onmousemove 赋值可以(也应该)重写为:

document.getElementById("map_image_africa").addEventListener('mousemove', function() {
maps.redraw();
learnPanel.redraw();
}, false);

关于javascript - onmousemove 事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15538114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com