onClick event in a For loop

后端 未结 4 1087
误落风尘
误落风尘 2020-12-01 14:48

I\'ve tried to create a loop with a for, and increment by an onclick event, but it doesn\'t work.

A part of js :

 var gameCase = [\'\', \'\', \'\', \         


        
4条回答
  •  臣服心动
    2020-12-01 15:15

    John Resig covers this topic very well in "Secrets of the JavaScript Ninja" ( http://ejohn.org/apps/learn/#59 )

    You'll need to create a temporary scope to preserve i's value

    for ( var i = 0; i < itemLists.length; i++ ) (function(i){ 
      itemLists[i].onclick = function() {
          // do something
      }
    })(i);
    

    Edit:

    var gameCase = ['', '', '', '', '', '', '', '', ''], // 9
    $listParent = $('game').find('ul'), // li's parent
    itemLists = $('game').getElementsByTagName('li'); // 9 items
    
    var listHandler = (function() {
      var i = 0;
    
      return function() {
        // $(this) will in here refer to the clicked li
        i++ // increment i
    
        if ( i === 9 ) {
          $listParent.off('click', 'li', listHandler); //remove eventhandler when i reaches 9
        }
      }
    }());
    
    $listParent.on('click', 'li', listHandler); // attach eventhandler to ul element
    

    This should do what you want, cant test it right now since I'm at work.

提交回复
热议问题