Late binding onclick event

前端 未结 2 1008
忘掉有多难
忘掉有多难 2021-01-27 19:22

Following part of my javscript(using jquery).

list = [\'a\', \'b\', \'c\'];
for(var i = 0 ; i< list.length ; i++) {
   $(\"click here\").
          


        
2条回答
  •  慢半拍i
    慢半拍i (楼主)
    2021-01-27 20:22

    Create a closure to retain the value of i for the particular iteration when the function is executed, without a closure i remains in scope causing all of the created functions to eventually have the value at the last iteration:

    var list = ['a', 'b', 'c'];
    for(var i = 0 ; i< list.length ; i++) {
       var func = createFoo(list[i]);
       $("click here").
          click(func).
          appendTo('#sometag');
    }
    function createFoo(value){
        return function(){
            foo(value);
        };
    }
    function foo(val) {
        console.log(val);
    }
    

    JS Fiddle: http://jsfiddle.net/5dUgw/

    Also note you need to change int to var since this is JS.

提交回复
热议问题