0

如何使该功能每个按钮只运行一次?
如果点击“点击我”只工作一次,其他按钮也一样为了不放太多代码,我举了一个例子..:http:
//jsbin.com/apexod/1/watch

<html>
<head>
<title></title>
</head>
<body>
<input type="button" value="click me" onclick="hello()"><br>
<input type="button" value="click me1" onclick="hello()"><br>
<input type="button" value="click me2" onclick="hello()">
<script>
   function hello(){
       alert("hello");
}
</script>
</body>
</html>
4

5 回答 5

4

更改您的onclick处理程序,以便该函数可以引用单击的元素。

<input type="button" value="click me" onclick="hello.call(this)"><br>
<input type="button" value="click me1" onclick="hello.call(this)"><br>
<input type="button" value="click me2" onclick="hello.call(this)">

然后更改函数以删除处理程序。

function hello(){
    alert("hello");
    this.onclick = null;
}
于 2012-12-06T13:58:04.503 回答
2

您可以删除 onclick

<html>
<head>
    <title></title>
</head>
<body>
    <input type="button" value="click" onclick="hello(this)"><br>
    <input type="button" value="click1" onclick="hello(this)"><br>
    <input type="button" value="click2" onclick="hello(this)">
<script>
       function hello(btn){ 
           alert("hello");
           btn.onclick = function(){};
    }
</script>
</body>
</html>
于 2012-12-06T13:58:08.463 回答
2

如果您在脚本中添加事件侦听器,则更易于管理(将行为与表示分开也是一种很好的做法):

演示:http: //jsfiddle.net/4N4ur/

<input type="button" value="click">
<input type="button" value="click1">
<input type="button" value="click2">​

<script>
var inputs = document.getElementsByTagName('input');
for(var i=0; i<inputs.length; i++) {
    inputs[i].onclick = function() {
        hello();
        this.onclick = null; // reset the handler
    }
}
function hello() {
    alert('hello';
}
</script>
于 2012-12-06T13:59:39.073 回答
1

单击按钮调用下面的函数,按钮 id 或名称作为参数

    <script>
       function hello(caller){
          if (caller == 'button1' && $("#button1clicked").val() != '1')
          {
         // Your code to execute for the function
         alert("hello");
       // set value for button1clicked
       $("#button1clicked").val("1");
       }else {
       // do nothing
       }

     }
     </script>

为没有按钮添加上述条件

于 2012-12-06T14:05:27.290 回答
1

虽然上面的场景和答案都是针对点击处理程序的,但原始问题的答案how to make a function that only runs once通常是使用包装函数完成的,类似于 UnderscoreJS.once方法:

function once(fn) {
  var called = false;
  return function() {
    if (!called) {
      called = true;
      fn.apply(this, arguments);
    }
  }
}

上面的实现只允许原始函数被调用一次,它会传递后面调用的上下文和参数。然后将其用作:

var oneTimeFn = once(function() {
  console.log('I was called.');
});

oneTimeFn();
//-> I was called.

oneTimeFn();
//-> undefined
于 2015-10-21T18:44:29.003 回答