Javascript 单击eventListener时出现问题
我发现了一个示例任务,当您单击文档中的任意位置时,在页面上显示警报。在任务中,您只需要编辑display()函数,该函数有两个参数-myFunc和myObj,以便显示person对象的名称。我想出了类似的方法,但警报只在页面刷新后出现,而不是在每次单击文档后出现Javascript 单击eventListener时出现问题,javascript,jquery,Javascript,Jquery,我发现了一个示例任务,当您单击文档中的任意位置时,在页面上显示警报。在任务中,您只需要编辑display()函数,该函数有两个参数-myFunc和myObj,以便显示person对象的名称。我想出了类似的方法,但警报只在页面刷新后出现,而不是在每次单击文档后出现 function start() { var person = { name : "John" }; function alertName() { alert(""+this.na
function start() {
var person = {
name : "John"
};
function alertName() {
alert(""+this.name.toUpperCase() + "");
}
document.addEventListener('click', display(alertName, person));
}
function display(myFunc, myObj) {
name = myObj.name;
myFunc();
}
start();
这是小提琴:
函数开始(){
个人变量={
姓名:“约翰”
};
函数alertName(){
警报(“+this.name.toUpperCase()+”);
}
document.addEventListener('click',start(alertName,person));
}
功能显示(myFunc、myObj){
name=myObj.name;
myFunc();
}
开始();
正文{
背景颜色:黄色;
}
您需要了解
display
是一个函数,通过display(alertName,person)
您可以立即调用它,而不是作为事件回调。但是addEventListener
需要函数引用作为第二个参数,因此这意味着在调用display(alertName,person)时
必须返回一个新函数,该函数将从内部调用alertName
(这是一个引用)
最后,this.name
在alertName
中意味着需要在myObj
的上下文中调用它
函数开始(){
个人变量={
姓名:“约翰”
}
函数alertName(){
警报(“+this.name.toUpperCase()+”);
}
document.addEventListener('click',display(alertName,person));
}
功能显示(myFunc、myObj){
返回函数(){
myFunc.call(myObj)
}
}
开始();
单击某处。
addEventListener第二个参数中的问题需要是在触发事件时要调用的函数
在您的示例中,您传递的是指令而不是函数。您可以在函数体中添加display()调用,并将该函数作为第二个参数传递:
function start() {
var person = {
name : "John"
};
function alertName() {
alert(""+this.name.toUpperCase() + "");
}
document.addEventListener('click', function() {
display(alertName, person)
});
}
function display(myFunc, myObj) {
name = myObj.name;
myFunc();
}
start();
事件侦听器不是这样工作的。您不必在回调中选择参数。此外,由于包含参数,这样做会在声明事件侦听器时执行函数。您需要传递对函数的引用。从技术上讲,您所做的是传递display()的结果函数作为回调参数。这没有任何意义,因为该函数不返回任何内容。而您的fiddle不起作用,因为您调用了一个不存在的函数,并且它与此处的示例不匹配。在发布之前检查您的内容:-)那里没有jquery-您打算单独使用jquery或javascript吗?