-3

送信ボタンが機能をトリガーするフォームがあります。と呼びましょうycClick()。送信後 30 秒間この機能を無効にする必要がありますが、引き続き機能するには送信ボタンが必要です。ボタン全体を無効にしたくはありません。ボタンがトリガーする機能だけです。(ユーザーが 30 秒前にもう一度ボタンを押すと、もう一度送信する必要がありますがycClick()、2 回目の実行は必要ありません。) 私は何百万もの異なることを試しましたが、役に立ちませんでした。やっと近づいてきた気がするのですが、なぜかまだうまくいきません。クリックすると、ycClick() がまったく実行されません。私は何を間違っていますか?これが私が得たものです:

function ycClick(){
    ...
}



function toggleSubmit() {
    if (document.getElementById('ycsubmit').onclick == null) {
        document.getElementById('ycsubmit').onclick = ycClick();
    } else {
        document.getElementById('ycsubmit').onclick = null;
    } 
} 


function timer()
{

  if (count <= 0 || count == null)
  {
  ycClick();
  } else {
  count=30;
  counter=setInterval("timer()",1000);
  count=count-1;
 toggleSubmit();
}
}

<FORM ID="myform">
    <INPUT ID="ycsubmit" TYPE="SUBMIT" ONCLICK="timer();">
</FORM>
4

2 に答える 2

1

これにより、ボタンがトグルされます。

var isEnabled = true;

function toggleSubmit() {
    if (isEnabled) {
        document.getElementById("ycsubmit").onclick = function() {};
    } else {
        document.getElementById("ycsubmit").onclick = ycClick;
    } 

    isEnabled = !isEnabled;
}

また、使用した場合、次のようsetIntervalに括弧や引用符は必要ありません。timer

counter=setInterval(timer,1000);

さらに良いことに、30 秒待ちたい場合は、ボタンの機能を切り替えてから、30 秒後にもう一度やり直してください。

toggleSubmit();
setTimeout(toggleSubmit(), 30000);
于 2012-06-25T19:35:39.910 に答える
0

Incomplの答えを詳しく説明するには:

タイムアウトの機能を設定する場合、指定した値が使用されます。技術的には、あなたのsetTimeout("timer()",1000);意志はあなたが望むことを正確に行います。

タイムアウトは、 Eval()関数が機能するのと同様の方法で「timer()」を評価します。

ただし、このようなことを行うと、知識がなかったりsetTimeout(toggleSubmit(), 30000);経験が浅かったりすると、意図しない結果が生じる可能性があります。タイムアウトは、あなたが提供したものの値を取得する必要があります。この場合、タイムアウトは、値を返すことを期待して toggleSubmit() 関数を呼び出します (値は返されません)。そのため、関数を 2 回呼び出すだけで、タイムアウトにはトリガーする関数がありません。

これを修正するには、関数名の後に「()」を含めないようにする必要があります。これを行うと、変数として機能し、その値が関数内の実際のコードになります。

これにより、関数の別の機能が適切に設定されますsetTimeout()setTimeout(toggleSubmit, 30000, "hello there", "sir");関数を呼び出し、toggleSubmit()パラメータ「hello there」と「sir」を提供します。この関数は実際にはパラメーターを取らないので、何もしませんが、知っておくと便利です。

于 2012-06-25T20:28:04.550 に答える