假设我有一些HTML锚元素,我想为每个元素设置一个处理程序。
window.onload = function() {
// I select all of the anchors
var myAnchors = document.querySelectorAll("a");
// I iterate through the anchors and set a handler to each of them
for (var i = 0; i < myAnchors.length; i++) {
myAnchors[i].onclick = handleControl;
}
}
function handleControl(e) {
var id = e.target.getAttribute("id");
}
我无法理解设置处理程序如何将参数传递给handleControl
函数。换句话说,myAnchors[i].onclick = handleControl;
如何将值e
传递给处理程序?
我从JavaScript编程书中获得了这段代码。
答案 0 :(得分:6)
没有。基本上,当某个时间点值可用时,你会说使用什么功能。例如,您可以说当单击链接时,应调用您指定的函数handleControl
。参数e
由浏览器传递给它,它表示有关click事件的信息。
所以想想它:
anchor.onclick(event_info)
那样,其中event_info
对应e
上的handleControl
参数。请记住,这不一定完全正在发生什么,但回答你的问题的重点是该参数来自其他地方(在这种情况下,浏览器),并传递给调用您指定的函数。
答案 1 :(得分:1)
我相信你只是想知道怎么做?
通俗地说:
handleControl
,这里你得到了对该函数的引用。onclick
属性this.onclick(e);
,e
为Event
对象,this.onclick
对处理函数的引用如果这不是你要求的,我觉得很愚蠢,你可以忽略它;)
答案 2 :(得分:1)
您的问题是如何设置处理程序将参数传递给handleControl函数。换句话说,$customers = $this->Customer->find('list',
array('fields' => array('email'),
'conditions' => array('event_id' => $this->request->data['Product']['event_id'],
'AND' => array('not' => array('Customer.email' => null),'not' => array('Customer.email' => '')
)
)
);
如何将值myAnchors[i].onclick = handleControl;
传递给处理程序?
因此,e
事件将触发一个函数:
onClick
在内部,您将点击锚点对象function(e) {
// Whatever you want to do with clicked 'anchor' e, do it here
}
。
在你的例子中,函数
e
也一样。
答案 3 :(得分:0)
所以当你这样做时
myAnchors[i].onclick = handleControl;
您实际上正在注册回调函数
myAnchors [i]元素的点击事件。
浏览器的dom引擎跟踪每个dom元素的每个事件的所有回调。
现在当元素发生事件时,dom引擎会调用与元素和该事件对应的所有回调。但是它调用了一个参数,它是一个事件对象。
答案 4 :(得分:0)
这里函数handleControl
订阅了DOM元素。
因此,如果从DOM触发任何单击事件,则事件信息e将被传递给订阅的方法。