Javascript将事件传递给函数
为什么第一种方法有效,而第二种方法无效 我不明白为什么我可以使用第一种方法将事件传递给函数,而不是第二种方法。对我来说,这些应该是一样的。松散地以…为基础 这确实有效:Javascript将事件传递给函数,javascript,function,events,mouseevent,Javascript,Function,Events,Mouseevent,为什么第一种方法有效,而第二种方法无效 我不明白为什么我可以使用第一种方法将事件传递给函数,而不是第二种方法。对我来说,这些应该是一样的。松散地以…为基础 这确实有效: document.onclick = function (e) { var x = e.pageX; var y = e.pageY; console.log(x); }; 这是行不通的。它返回“未捕获引用错误:未定义z” 因为在第二种方法中,您调用的是函数,而不是将事件操作定义为它。请尝试以下方法: functi
document.onclick = function (e) {
var x = e.pageX;
var y = e.pageY;
console.log(x);
};
这是行不通的。它返回“未捕获引用错误:未定义z”
因为在第二种方法中,您调用的是函数,而不是将事件操作定义为它。请尝试以下方法:
function mousePosition (e) {
var x = e.pageX;
var y = e.pageY;
console.log(x);
};
document.onclick = function(z){
mousePosition(z);
}
或者:
function mousePosition (e) {
var x = e.pageX;
var y = e.pageY;
console.log(x);
};
document.onclick = mousePosition;
因为在第二种方法中,您调用的是函数,而不是将事件操作定义为它。请尝试以下方法:
function mousePosition (e) {
var x = e.pageX;
var y = e.pageY;
console.log(x);
};
document.onclick = function(z){
mousePosition(z);
}
或者:
function mousePosition (e) {
var x = e.pageX;
var y = e.pageY;
console.log(x);
};
document.onclick = mousePosition;
将函数引用传递给onclick事件处理程序的第一个函数。第二次尝试调用mousePosition(z)并将结果分配给onclick处理程序。这不是您想要的。将函数引用传递给onclick事件处理程序的第一个函数。第二次尝试调用mousePosition(z)并将结果分配给onclick处理程序。这不是您想要的。如其他答案所述,您的代码:
document.onclick = mousePosition(z);
正在调用mousePosition()
函数,传递未定义的变量z
。您应该做的是传递对鼠标位置的引用
:
document.onclick = mousePosition; // note: no parentheses
“我不明白为什么我可以使用第一种方法将事件传递给函数”
事实上,您并没有向函数传递事件。您正在声明一个匿名函数,该函数有一个名为e
的参数,并设置document.onclick
以引用该函数
当事件发生时,浏览器调用您的函数,它可能会传递事件对象,具体取决于您使用的浏览器:IE不会将事件对象作为参数传递,它会通过窗口.event
属性使其可用
浏览器不管您是否明确声明了参数,事实上,即使您没有声明,您仍然可以通过访问传入的任何参数。正如其他答案所述,您的代码:
document.onclick = mousePosition(z);
正在调用mousePosition()
函数,传递未定义的变量z
。您应该做的是传递对鼠标位置的引用
:
document.onclick = mousePosition; // note: no parentheses
“我不明白为什么我可以使用第一种方法将事件传递给函数”
事实上,您并没有向函数传递事件。您正在声明一个匿名函数,该函数有一个名为e
的参数,并设置document.onclick
以引用该函数
当事件发生时,浏览器调用您的函数,它可能会传递事件对象,具体取决于您使用的浏览器:IE不会将事件对象作为参数传递,它会通过窗口.event
属性使其可用
浏览器不管你是否明确声明了参数,事实上,即使你没有声明,你仍然可以访问通过传递的任何参数。哈哈,是的,这就是我出错的原因:)哈哈,是的,这就是我出错的原因:)谢谢李,那么你的意思是什么“将函数引用传递给onclick事件处理程序”?这是否意味着onclick事件处理程序现在除了执行任何其他操作外还将执行该函数?通过引用,就像说“当事件发生时调用提供的函数”“.这就是你在第一部中所做的。第二种方法是不传递引用,实际上是调用函数并将结果传递给onclick处理程序,这可能不是您想要做的(但可以工作(取决于函数返回的内容)),您可以对它们进行菊花链,但这是另一天的事!谢谢Lee,那么“将函数引用传递给onclick事件处理程序”是什么意思呢?这是否意味着onclick事件处理程序现在除了执行任何其他操作外还将执行该函数?通过引用,这就像说“当事件发生时调用提供的函数”。这就是你在第一节中所做的。第二种方法是不传递引用,实际上是调用函数并将结果传递给onclick处理程序,这可能不是您想要做的(但可以工作(取决于函数返回的内容)),您可以对它们进行菊花链,但这是另一天的事!是否需要在此处添加嵌套闭包/函数?因为
mousePosition
已经是一个单参数函数,所以它不能仅仅是document.onclick=mousePosition
?是的,但它只是为了说明问题,您需要在那里添加嵌套闭包/函数吗?它不能仅仅是document.onclick=mousePosition
,因为mousePosition
已经是一个单参数函数了吗?是的,但这只是为了说明问题