Javascript 为每个按钮指定相同的功能,并在单击任何按钮时更改功能参数。 函数createbtn() { var buttons_container=document.getElementsByClassName(“按钮”)[0]; var n=document.getElementById(“number”).value; 按钮\u container.innerHTML=''; 对于(i=1;ip;i--) { document.getElementById(“x”+i).value=i-p; } 对于(i=1;i

Javascript 为每个按钮指定相同的功能,并在单击任何按钮时更改功能参数。 函数createbtn() { var buttons_container=document.getElementsByClassName(“按钮”)[0]; var n=document.getElementById(“number”).value; 按钮\u container.innerHTML=''; 对于(i=1;ip;i--) { document.getElementById(“x”+i).value=i-p; } 对于(i=1;i,javascript,html,Javascript,Html,,如果您的问题是是否可以这样做: <input type="text" id="number"/> <input type="button" value="create button" onclick="createbtn()"/> <div class="buttons"></div> <script> function createbtn() { var buttons_container = document.getEle

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

<input type="text" id="number"/>
<input type="button" value="create button" onclick="createbtn()"/> 
<div class="buttons"></div>

<script>
function createbtn() 
{
 var buttons_container = document.getElementsByClassName("buttons")[0];
 var n=document.getElementById("number").value;

 buttons_container.innerHTML = '';

 for(i=1;i<=n;i++)
 {
  var x = document.createElement("INPUT");
  x.setAttribute("type", "button");
  x.setAttribute("value", i);
  x.setAttribute("id","x"+i);
  buttons_container.appendChild(x);
  x.addEventListener('click',(function(i_local_copy){return function()
  {rotate(i_local_copy);};})(i));
 } 

}

 function rotate(p)
 {  
  var n=document.getElementById("number").value;
  var j=n;
  var k=0; 
  for(i=n;i>p;i--)
  {
   document.getElementById("x"+i).value=i-p;
  }
  for(i=1;i<=p;i++)
  {
   document.getElementById("x"+i).value=(j-(p-1))+k; 
   k++;
  }
 }
</script>
…更简单地说,答案是肯定的,使用
函数#bind
(|):

Function#bind
返回一个新函数(“绑定”函数),调用该函数时,该函数将使用给定的
值(第一个参数)调用原始函数,后跟您给定的任何参数
bind
,后跟调用绑定函数时使用的任何参数

由于您在
旋转
中没有使用
this
,因此我们为
绑定
的第一个参数指定什么并不重要。我们将
i
作为第二个参数传递给
绑定
,因此调用绑定函数时,
旋转
会将其视为第一个参数


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

这里有一个更简单的例子来说明这个想法:

//一个内联调用的作用域函数,以避免创建blobal
(功能(){
//他们共享的变量
var计数器=0;
//把钮扣扣上
var buttons=document.queryselectoral(“输入[type=button]”);
Array.prototype.forEach.call(按钮、函数(按钮){
addEventListener(“单击”,函数(){
//递增共享变量
++计数器;
//显示它和增加它的按钮
console.log(单击this.value+,counter=“+counter”);
},假);
});
})();


这似乎可以做到。问题是什么?谢谢!!它工作得很好,但我想给每个按钮分配相同的I值,并在单击任何按钮时递增。有可能吗?你能帮我吗?@sagar:你的意思是你想让它们都共享一个变量吗?是的!有可能吗?@sagar:是的,只要在sa声明就行了me level as
rotate
rotate
将在其上关闭,因此对
rotate
的所有调用将使用相同的变量。(在问题的示例中,这意味着您将全局声明变量。但没有必要这样做,如果是我,我会将您的所有代码包装在一个自调用作用域函数中,以避免创建全局变量。)
x.addEventListener('click',(function(i_local_copy){return function()
  {rotate(i_local_copy);};})(i));
x.addEventListener('click', rotate.bind(null, i));