如何附加事件" onblclick ",其处理程序在直接分配"this"作为参数
How to attach event "ondblclick", whose handler in direct assign take "this" as parameter
RawClicked
我有一个旧的tr分配方法为这样的事件:
<tr ondblclick="RawClicked(this) .......
,我想在JavaScript代码中附加这样的事件,并删除在HTML标签<tr .... >
中分配事件处理程序:
var element = document.getElementById("CustomersTable").getElementsByTagName("tr");
AssigningEventHandles(element, "dblclick", RawClicked(this));
function AssigningEventHandles(element, event, handler) {
if (element.addEventListener) {
element.addEventListener(event, handler, false);
}
else if (element.attachEvent) {
element.attachEvent("on"+ event, handler);
}
}
function RawClicked(raw) {
var rawDoubleClicked = raw.id;
alert(rawDoubleClicked);
}
那么在这种情况下,我如何将参数this
传递给函数呢?
-
在您的示例中,
element
是节点的集合,而不是单个元素,因此您不能以这种方式添加事件侦听器。您可以遍历此节点集合,或者使用事件委托并将事件侦听器附加到<table>
。 -
在这行
AssigningEventHandles(element, "dblclick", RawClicked(this));
RawClicked被执行,this
绑定到全局对象。所以作为handler
传递给AssigningEventHandles
的参数是这个函数的结果,它是空的。您应该像这样传递函数:AssigningEventHandles(element, "dblclick", RawClicked);
,然后在RawClicked
中使用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);
}
http://jsfiddle.net/WU76d/在firefox(使用addEvenListener)中,处理程序似乎在元素的范围内运行,因此只需在RawClicked中使用"this"应按预期工作
相关文章:
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 在循环中分配json值时,值被覆盖
- 动态分配GA增强型电子商务跟踪器
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 铬:“;未捕获的语法错误:意外的标记:"
- 如何在jQuery中将函数的输出分配给变量
- 为集合分配大量的模型弹药
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- onclick函数需要双击,因为类分配延迟
- Javascript 将变量分配给警报
- 使用“+="操作人员
- //而不是在src=“”上使用http://"属性
- "未捕获的语法错误:意外的标记}"
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- 奇怪的行为angularjs返回"类型错误:无法分配给只读属性"
- 关于变量分配的澄清"var x=!0〃;
- Lawnchair javascript数据"得到“;不允许我分配给另一个变量