关于动态赋事件

本文探讨了在JavaScript中为多个元素动态绑定点击事件时遇到的问题:如何确保每个元素触发事件时能正确传递对应的参数,而不是总是获取到最后一个元素的参数。通过分析问题原因及提供解决方案,帮助读者理解闭包的概念并掌握一种实用的解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>test</title>
<script language="javascript">
var which_stock = 0;

function SetStock(num){
which_stock = num;
}
</script>
</head>
<body>
<script>
var oPopup = window.createPopup();
var str = "<DIV style='BORDER-RIGHT: #455690 1px solid; BORDER-TOP: #a6b4cf 1px solid; Z-INDEX: 99999; LEFT: 0px; BORDER-LEFT: #a6b4cf 1px solid; WIDTH: 222px; BORDER-BOTTOM: #455690 1px solid; POSITION: absolute; TOP: 0px; HEIGHT: 200px; BACKGROUND-COLOR: #c9d3f3'>"
str += "<DIV style='WORD-BREAK: break-all' align=left><A href='javascript:void(0)' id='btCommand' name='btCommand'><FONT color=#ff0000>aaa</FONT></A></DIV>"
str += "<DIV style='WORD-BREAK: break-all' align=left><A href='javascript:void(0)' id='btCommand' name='btCommand'><FONT color=#ff0000>bbb</FONT></A></DIV>"
str += "</DIV>"

oPopup.document.body.innerHTML = str;
urlAry = ['aaa', 'bb'];
var cmdAry = oPopup.document.getElementsByName("btCommand");

for (var g = 0; g < cmdAry.length; g++) {
var ul = urlAry[g];
// alert("ul=" + ul);
cmdAry[g].setAttribute("cmd", ul);
cmdAry[g].onclick = function(){
alert('ulllll=' + this.getAttribute("cmd"));
oncommand(this.getAttribute("cmd"));
}
}

function oncommand(ss){
alert("oncommand==" + ss);
}

oPopup.show(70, 70, 180, 60, document.body);
</script>
</body>
</html>



如果在给“btCommand”赋click事件时,直接使用
[quote]
for(var g=0;g<cmdAry.length;g++){
var ul=urlAry[g];
alert("ul="+ul);
cmdAry[g].οnclick=function(){
alert('ulllll='+ul);
oncommand(ul);
}
}

[/quote]最后得到的ul永远是最后一个,所以采用上面的cmdAry[g].setAttribute("cmd", ul);
和 oncommand(this.getAttribute("cmd"));
方式。
因为同事要实现“提供类似MSN消息框”,他们找到一段代码,我采用上面的方式修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值