[英]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.