0

関数をボタンごとに1回だけ実行するようにするにはどうすればよいですか?
「clickme」のクリックが1回だけ機能し、他のボタンも同じである場合は、コードをあまり入れないように、例を示します。..: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

オンクリックを削除するだけです

<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

上記のシナリオと回答はすべてクリックハンドラーに非常に固有ですが、元の質問への回答は通常、UnderscoreJSメソッドhow to make a function that only runs onceと同様のラッパー関数を使用して行われます。.once

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

上記の実装では、元の関数を1回だけ呼び出すことができ、後の呼び出しのコンテキストと引数を通過します。これは、次のように使用されます。

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

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

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