0

ユーザー登録フォームがあります。ユーザー フォームが xx 秒 (5 秒) 以内に入力されたかどうかを確認する必要があります。5 秒未満の場合は、フォームの送信を無効にします。送信ボタンのクリックを無効にするか、falseを返すなどのようなもの。

jquery スクリプトをいくつか書きましたが、正しく動作しません。

サンプルフォームはこちら。

<form id="registerform" class="registerform" method="post"/>
   <input type="text" name="username" id="username" />
   <input type="text" name="email" id="email" />

   <input type="submit" name="submit" id="submitBtn" value="Submit" />
</form>

ここにjqueryスクリプトがあります。

<script type=javascript>
jQuery.noConflict();
jQuery(document).ready(function ($) { 

     var typingTimer;    //timer identifier
     var doneTypingInterval = 5000;  //time in ms, 5 second for example

     var checktime = 0;

     jQuery('form#registerform').find(':input').each(function(){
        jQuery(this).keyup(function(){
            typingTimer = setTimeout(doneTyping, doneTypingInterval);
        });

        jQuery(this).keydown(function(){
            clearTimeout(typingTimer);
        });

    });



    function doneTyping () {
        checktime = typingTimer;
        return checktime;
    }

    jQuery('form#registerform').submit(function() {
        checktime = doneTyping ();
        var timerInsec = (doneTypingInterval/1000);
        if(checktime < timerInsec) {
            return false; // disable form submit
        } else {
             // if user take to fill the form more than 5 seconds, submit the form
            return true; 
        }
    });

});
</script>

wordpressの登録フォームに統合する必要があるので試してみました。誰かがこれに対する解決策/解決策を持っている場合は、私を助けてください。本当に感謝しています。

ありがとうございました

4

3 に答える 3

1

これにより、送信ボタンが 5 秒間無効になります。

var submitButton = $('#submitBtn');
submitButton.prop("disabled", true);
setTimeout(function() {
   submitButton.prop("disabled", false);
}, 5000);

オンライン例

また、悪意のあるユーザーが他の方法でフォームを送信しないようにする必要があります。サーバー側の検証を必ず実行してください。

if ( isset($_SESSION['last_submit_time']) ) {
    $delay  = intval($_SESSION['last_submit_time']) + 5;
    if ( time() < $delay ) {
          $_SESSION['last_submit_time'] = time();
          echo "You must wait for 5 more seconds before submitting. Timer reset.";
          exit;
    }
}
于 2013-11-03T20:14:40.443 に答える
0

timer の入力には time が含まれていません。代わりに、現在刻んでいるタイマーの ID が含まれています...キーを押すと常に値が設定されるため、false になることはありません。また、各入力にタイマーの追加とリセットを追加します。ユーザーにフォームへの入力に 5 秒以上費やしてもらいたい場合は、5 秒が経過するまで送信ボタンを有効にしないでください。

function doneTyping () {
    checktime = typingTimer;//will always have a value that evaluates to true
    return checktime;
}
于 2013-11-03T20:20:46.533 に答える
0

試してみてください... HTML:

<form id="registerform" class="registerform" method="post">
    <input type="text" name="username" id="username">
    <input type="text" name="email" id="email">

    <input type="submit" name="submit" id="submit" value="Submit">
</form>

jQuery:

jQuery(document).ready(function ($) { 
    var intervalTime = 5000,
        inputID      = "#submit";



    function initialize(interval, input) { 
        intervalTime = interval;
        inputID      = input;

        jQuery(inputID).prop("disabled", true);        
        startCouting();
    }



    function startCouting() {
        setTimeout(function() {
            enableInput();
        }, intervalTime);
    }



    function enableInput() {
        jQuery(inputID).prop("disabled", false);
    };



    initialize(5000, "#submit");
});
于 2013-11-03T20:31:33.093 に答える