为每个按钮分配相同的功能,并在单击任何按钮时更改功能参数。

时间:2016-07-21 11:21:31

标签: javascript html html5

List<ListViewItem> arrayItems = dataSourceObject.Select(x => new 
                                                  ListViewItem(x.TextProperty)).ToList();

上面的代码是创建与文本字段中输入的数字相等的按钮数,并为每个按钮分配一个事件,以便当按顺序点击按钮时,按钮值会旋转。我想分配相同的功能每个按钮(例如,旋转(i),其中每个按钮必须具有共同的i值),并且当单击任何按钮时,旋转功能中的i值必须增加。

1 个答案:

答案 0 :(得分:0)

如果您的问题是否可以这样做:

x.addEventListener('click',(function(i_local_copy){return function()
  {rotate(i_local_copy);};})(i));

...更简单地说,答案是肯定的,Function#bindspec | MDN):

x.addEventListener('click', rotate.bind(null, i));

Function#bind返回一个新函数(&#34; bound&#34;函数),当被调用时,将调用具有给定this值(第一个参数)的原始函数,后跟任何您赋予bind的参数,后跟调用绑定函数的任何参数。

Sinc eyou未在this中使用rotate,我们为bind的第一个参数提供的内容并不重要。我们将i作为第二个参数传递给bind,以便rotate在调用绑定函数时将其视为第一个参数。

在评论中,您说过您希望所有按钮共享同一个变量。如果是这样,只需将其声明为与声明rotate相同的级别。然后rotate将关闭它。

这是一个更简单的例子来证明这个想法:

&#13;
&#13;
// An inline-invoked scoping function to avoid creating blobals
(function() {
  // The variable they all share
  var counter = 0;
  
  // Hook up the buttons
  var buttons = document.querySelectorAll("input[type=button]");
  Array.prototype.forEach.call(buttons, function(button) {
    button.addEventListener("click", function() {
      // Increment the shared variable
      ++counter;
      
      // Show it and the button that incremented it
      console.log(this.value + " clicked, counter = " + counter);
    }, false);
  });
})();
&#13;
<input type="button" value="Button 1">
<input type="button" value="Button 2">
<input type="button" value="Button 3">
&#13;
&#13;
&#13;