6

HTML は次のとおりです。

<input name="submit"
       type="submit"
       class="button"
       value="Click Here"
       tabindex="13"
       onclick="return ValidateForm();" />

ValidateForm() 関数には、通常のフォーム検証コードがすべて含まれています。私が実行できない他の機能(それ自体で正常に動作することを除いて..例

<input name="submit"
       type="submit"
       class="button"
       value="Click Here"
       tabindex="13"
       onclick="disDelay(this);" />

onclickの後に両方を入れてみました...例

<input name="submit"
       type="submit"
       class="button"
       value="Click Here"
       tabindex="13"
       onclick="return ValidateForm(); disDelay(this);" />

また、コードを同じ関数に入れてみましたが、成功しませんでした。

関数 disDelay() は

function disDelay(obj){
    obj.setAttribute('disabled','disabled');
    setTimeout(function(){obj.removeAttribute('disabled')},10000);
}

フォームが複数のクリックから重複して送信されないようにするための遅延として使用されます。テスト目的のため、遅延は現在 10 秒です。連携するには検証と遅延が必要です。

4

3 に答える 3

4

最初の関数の値を返すと、クリック ハンドラーが終了します。基本的に、これはあなたが結合しようとしているものです:

<input name="submit" type="submit" class="button" 
       value="Click Here" tabindex="13" 
       onclick="return submit_Click(this);" />

<script type="text/javascript">
    function submit_Click(sender) {
        return ValidateForm(); 
        disDelay(sender); // !!! This call is unreachable !!!
    }
</script>

これを修正するための簡単なオプションを次に示します。

<input name="submit" type="submit" class="button" 
       value="Click Here" tabindex="13" 
       onclick="return submit_Click(this);" />

<script type="text/javascript">
    function submit_Click(sender) {
        var r = ValidateForm(); 
        disDelay(sender); // It seems like you would only want to call this
                          // function if the form is validate, so there should
                          // probably be an if-statement surrounding it. However,
                          // I'll leave that up to you.
        return r;
    }
</script>
于 2012-08-06T20:41:14.380 に答える
2

関数呼び出しの順序を逆にするだけです。

<input name="submit" type="submit" class="button" value="Click Here" tabindex="13" onclick="disDelay(this); return ValidateForm(); " />

ValidateForm からの戻りにより、コードの残りの部分が到達不能になるため、最後でなければなりません。

于 2012-08-06T20:42:17.740 に答える
0

onclick 文字列では、ValidateForm() からの応答を返すため、disDelay(this) が呼び出されないため、2 番目のステートメントは実行されません。

html 内で onclick 属性を絶対に使用する必要がある場合は、次のことを試してください。

<input name="submit" type="submit" class="button" value="Click Here" tabindex="13" onclick="disDelay(); return ValidateForm();" />
于 2012-08-06T20:43:53.917 に答える