簡體   English   中英

傳遞給.click()方法參數的參數是否始終是Event對象?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM