繁体   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