jquery事件绑定按值传递

Pet*_*ong 1 javascript jquery pass-by-value javascript-events

以下页面显示五个按钮,单击每个按钮获取警报'5'.我想当我点击第一个按钮时,我得到警报'1',第二个按钮'2'......等等.

<!doctype html>
<html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
    </head>
    <body>
        <div id="nums"></div>
        <script type="text/javascript">
            var nums = [1,2,3,4,5];
            for(var i in nums){
                var num = nums[i];
                var btn=$('<button></button>').text(num).click(function(){alert(num);});
                $('#nums').append(btn);
            }
        </script>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

Fis*_*rdo 5

JavaScript只有函数作用域,所以在你的例子中只有一个num,它一直被修改,并且当调用click事件时,它等于五.要解决这个问题,你必须使用新的函数范围创建正确的闭包,如下所示:

var nums = [1,2,3,4,5];
var createClick = function (num) { return function() { alert(num); }; };
for(var i in nums){
    var num = nums[i];
    var btn=$('<button></button>').text(num).click(createClick(num));
    $('#nums').append(btn);
}  
Run Code Online (Sandbox Code Playgroud)