如何使该功能只在javascript中运行一次

时间:2012-12-06 13:54:00

标签: javascript events

如何使每个按钮只运行一次该功能? 如果“点击我”中的点击只能使用一次,而其他按钮则相同 为了不放太多代码,我举了一个例子......:
  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>

5 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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>

答案 2 :(得分: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>

答案 3 :(得分:1)

点击按钮调用下面的函数,按钮ID或名称为param

    <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>

为no no按钮添加上述条件

答案 4 :(得分: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