我只是想了解.click()方法中的参数是如何工作的。根据我的理解,.click()方法将函数作为参数。
根据jQuery API,.click()可以采用两个参数:
([eventData], event handler)
然后事件处理函数可以使用此参数:
(Event eventObject)
这是否意味着.click()方法的函数参数总是期望"事件对象"被传递给它?
就像下面的例子一样,我创建了一个随机对象,然后将其作为参数传递。 .click()方法的函数参数似乎忽略它是一个随机对象并继续将它用作"事件对象"。
var anObject = {
"property1" : "someproperty"
};
$(document).click(function(anObject) {
var x = anObject.pageX;
var y = anObject.pageY;
logClicks(x, y);
});
var logClicks = function(x, y) {
console.log("x: " + x + " y: " + y)
}
问题是,引擎盖下发生了什么?为什么会这样?
修改
我对[eventData]
参数以及事件处理程序如何使用它并不那么困惑。更多关于它的函数参数排序如何将传递给它的任何参数转换为保存Event对象的变量。
答案 0 :(得分:2)
这是否意味着.click()方法的函数参数总是期望" Event对象"要传递给它?
是的,传递给事件处理函数的参数总是是一个jQuery事件对象。
您的混淆似乎在([eventData], event handler)
方法的click()
签名周围。在这种情况下,第一个参数用于向提供给事件处理程序的data
对象的event
参数添加值。对于您的问题中的代码,您可以使用:
var anObject = {
"property1" : "someproperty"
};
$(document).click(anObject, function(e) {
var x = e.pageX;
var y = e.pageY;
var data = e.data.property1;
logClicks(data, x, y);
});
var logClicks = function(data, x, y) {
console.log(data, x, y)
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
答案 1 :(得分:0)
您将匿名函数作为参数传递给.click()
函数。
因此,该函数具有不同的范围,anObject
不是您已全局声明的内容,而是实际上由jQuery API传递的内容。
var anObject = {
"property1" : "someproperty"
};
$(document).click(function aNewFunctionWithHisOwnScope(anObject) {
// here anObject references an Event
x = anObject.pageX;
y = anObject.pageY;
logClicks(x, y);
});
// here anObject references again your defined anObject
最后,是的:总是成为一个事件
编辑,因为我可能还不清楚:
你的anObject
var可以从匿名函数中获得,因为它就像一个全局变量。但由于它们具有同名,因此在函数内部使用最后一个引用,因此使用的值(在函数内部)是作为参数传递的值,而在函数外部是'global' anObject
保持其价值。
答案 2 :(得分:0)
click([eventData], event handler)
中的第一个参数需要eventData
,它将进一步传递给事件处理程序,之后您可以使用event.data
访问该数据:
$(document).click(anObject, function(e) {
x = e.pageX;
y = e.pageY;
// access the object passed as e.data
console.log(e.data.property1);
logClicks(x, y);
});