Javascript 如何附加事件“;ondblclick“点击”;,谁的处理程序在“直接分配”中接受;这";作为参数
RawClickedi对这样的事件使用了tr的旧赋值方法Javascript 如何附加事件“;ondblclick“点击”;,谁的处理程序在“直接分配”中接受;这";作为参数,javascript,javascript-events,parameters,event-handling,Javascript,Javascript Events,Parameters,Event Handling,RawClickedi对这样的事件使用了tr的旧赋值方法 <tr ondblclick="RawClicked(this) ....... 那么在这种情况下,如何将参数“this”传递给函数呢 在您的示例中,元素是节点的集合,而不是单个元素,因此您不能以这种方式添加事件侦听器。您可以迭代此节点集合,或者使用事件委派并将事件侦听器附加到 在这一行AssigningEventHandles(元素“dblclick”,RawClicked(this))RawClicked与绑定到全局对象的th
<tr ondblclick="RawClicked(this) .......
那么在这种情况下,如何将参数“this”传递给函数呢
元素
是节点的集合,而不是单个元素,因此您不能以这种方式添加事件侦听器。您可以迭代此节点集合,或者使用事件委派并将事件侦听器附加到
AssigningEventHandles(元素“dblclick”,RawClicked(this))
RawClicked与绑定到全局对象的this
一起执行。因此,作为handler
传递给AssigningEventHandles
的参数是该函数的结果,该函数无效。您应该像这样传递函数:AssigningEventHandles(元素“dblclick”,RawClicked)
然后在raw中使用this.id
而不是raw.id
var element = document.getElementById("CustomersTable").getElementsByTagName('tr');
AssigningEventHandles(element, "dblclick", RawClicked);
function AssigningEventHandles(element, event, handler) {
if( !element.length ){ /* convert to array if it's a single node */
element = [element];
}
for( var i=0; i<element.length; i++){ /* iterate over nodes and attach event listeners */
if (element[i].addEventListener) {
element[i].addEventListener(event, handler, false);
}
else if (element[i].attachEvent) {
element[i].attachEvent("on"+ event, handler);
}
}
}
function RawClicked() {
/* `this` is bound to the clicked element */
var rawDoubleClicked = this.id;
alert(this);
}
var element=document.getElementById(“CustomerTable”).getElementsByTagName('tr');
赋值事件句柄(元素“dblclick”,单击);
函数AssigningEventHandles(元素、事件、处理程序){
如果(!element.length){/*是单个节点,则转换为数组*/
元素=[元素];
}
对于(在firefox中的var i=0;i(使用AddEventListener)来说,处理程序似乎是在元素的作用域中运行的,所以只需在RawClicked中使用“this”就可以正常工作了pawel的回答肯定更好!你有没有尝试过我文章末尾的JSFIDLE链接?对我有用;)是的,我看到了,这就是我投票支持你的答案的原因,尽管它对我不起作用:)
var element = document.getElementById("CustomersTable").getElementsByTagName('tr');
AssigningEventHandles(element, "dblclick", RawClicked);
function AssigningEventHandles(element, event, handler) {
if( !element.length ){ /* convert to array if it's a single node */
element = [element];
}
for( var i=0; i<element.length; i++){ /* iterate over nodes and attach event listeners */
if (element[i].addEventListener) {
element[i].addEventListener(event, handler, false);
}
else if (element[i].attachEvent) {
element[i].attachEvent("on"+ event, handler);
}
}
}
function RawClicked() {
/* `this` is bound to the clicked element */
var rawDoubleClicked = this.id;
alert(this);
}