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 asrotate
rotate
将在其上关闭,因此对rotate
的所有调用将使用相同的变量。(在问题的示例中,这意味着您将全局声明变量。但没有必要这样做,如果是我,我会将您的所有代码包装在一个自调用作用域函数中,以避免创建全局变量。)
x.addEventListener('click',(function(i_local_copy){return function()
{rotate(i_local_copy);};})(i));
x.addEventListener('click', rotate.bind(null, i));