[英]Is the argument passed to .click() method parameter always the Event object?
我只想了解.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对象的变量的更多信息 。
这是否意味着.click()方法的功能参数始终希望将“事件对象”传递给它?
是的,传递给事件处理函数的参数将始终是jQuery事件对象。
您的困惑似乎与click()
方法的([eventData], event handler)
签名有关。 在这种情况下,第一个参数用于将值添加到提供给事件处理程序的event
对象的data
参数。 对于您问题中的代码,您将使用以下代码:
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>
您正在将匿名函数作为参数传递给.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
变量可从匿名函数内部获得,因为它就像一个全局变量。 但是由于它们具有相同的名称 ,因此在函数内部使用了最后一个引用,因此(在函数内部)使用的值是作为参数传递的值,而在函数外部,“全局” anObject
保留其值。
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);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.