<script type="text/javascript"> function a(id){ alert("这是第"+id+"个事件"); } function b(id){ alert("这是第"+id+"个事件"); } function replaceClick(){ var obj = document.getElementsByName("but"); for(var i = 1;i<=obj.length;i++) { var fin = i+4; var id = "but"+ i; document.getElementById(id).onclick = function(_id){return function(){b(_id)}}(fin); } } </script> <body> <input type="button" value="替换方法" onClick="replaceClick();"> <input name="but" id="but1" type="button" value="click me" onClick="a(1);"> <input name="but" id="but2" type="button" value="click me" onClick="a(2);"> <input name="but" id="but3" type="button" value="click me" onClick="a(3);"> <input name="but" id="but4" type="button" value="click me" onClick="a(4);"> </body>
<script> function a(id) { alert("这是第"+id+"个事件"); } function b(id) { alert("这是第"+id+"个事件"); } function replaceClick() { var obj = document.getElementsByName("but"); for(var i = 1;i<=obj.length;i++) { var fin = i+4; var id = "but"+ i; document.getElementById(id).onclick = new Function("aa("+fin+")"); } // document.getElementById("but").onclick = function (){b(2)}; } function aa(num){ b(num); } </script> <body> <input type="button" value="替换方法" onClick="replaceClick();"> <input name="but" id="but1" type="button" value="click me" onClick="a(1);"> <input name="but" id="but2" type="button" value="click me" onClick="a(2);"> <input name="but" id="but3" type="button" value="click me" onClick="a(3);"> <input name="but" id="but4" type="button" value="click me" onClick="a(4);"> </body>
你的原来的代码: function replaceClick() { var obj = document.getElementsByName("but"); for(var i = 1;i<=obj.length;i++) { var fin = i+4; var id = "but"+ i; document.getElementById(id).onclick = function (){b(fin)}; } // document.getElementById("but").onclick = function (){b(2)}; }其实形成了一个闭包,function(){b(fin)}中并没有定义fin,而是引用它的上一层对象的fin,这就导致,最后所有出来的结果是最后一个值。
function a(id){
alert("这是第"+id+"个事件");
}
function b(id){
alert("这是第"+id+"个事件");
}
function replaceClick(){
var obj = document.getElementsByName("but");
for(var i = 1;i<=obj.length;i++)
{
var fin = i+4;
var id = "but"+ i;
document.getElementById(id).onclick = function(_id){return function(){b(_id)}}(fin);
}
}
</script>
<body>
<input type="button" value="替换方法" onClick="replaceClick();">
<input name="but" id="but1" type="button" value="click me" onClick="a(1);">
<input name="but" id="but2" type="button" value="click me" onClick="a(2);">
<input name="but" id="but3" type="button" value="click me" onClick="a(3);">
<input name="but" id="but4" type="button" value="click me" onClick="a(4);">
</body>
<script>
function a(id)
{
alert("这是第"+id+"个事件");
}
function b(id)
{
alert("这是第"+id+"个事件");
}
function replaceClick()
{
var obj = document.getElementsByName("but");
for(var i = 1;i<=obj.length;i++)
{
var fin = i+4;
var id = "but"+ i;
document.getElementById(id).onclick = new Function("aa("+fin+")");
} // document.getElementById("but").onclick = function (){b(2)};
}
function aa(num){
b(num);
}
</script>
<body>
<input type="button" value="替换方法" onClick="replaceClick();">
<input name="but" id="but1" type="button" value="click me" onClick="a(1);">
<input name="but" id="but2" type="button" value="click me" onClick="a(2);">
<input name="but" id="but3" type="button" value="click me" onClick="a(3);">
<input name="but" id="but4" type="button" value="click me" onClick="a(4);">
</body>
function replaceClick()
{
var obj = document.getElementsByName("but");
for(var i = 1;i<=obj.length;i++)
{
var fin = i+4;
var id = "but"+ i;
document.getElementById(id).onclick = function (){b(fin)};
}
// document.getElementById("but").onclick = function (){b(2)};
}其实形成了一个闭包,function(){b(fin)}中并没有定义fin,而是引用它的上一层对象的fin,这就导致,最后所有出来的结果是最后一个值。