Javascript jQuery在xx秒内禁用表单提交

Javascript jQuery在xx秒内禁用表单提交,javascript,php,jquery,wordpress,form-submit,Javascript,Php,Jquery,Wordpress,Form Submit,我有一张用户登记表。我需要检查用户登记表填写时间是否少于xx秒(5秒)。如果少于5秒,则禁用表单提交。类似于禁用提交按钮、单击或返回false之类的东西 我写了一些jquery脚本,但没有正常工作 这是表格样本 <form id="registerform" class="registerform" method="post"/> <input type="text" name="username" id="username" /> <input typ

我有一张用户登记表。我需要检查用户登记表填写时间是否少于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>

jQuery.noConflict();
jQuery(文档).ready(函数($){
var typingTimer;//计时器标识符
var doneTypingInterval=5000;//以毫秒为单位的时间,例如5秒
var检查时间=0;
jQuery('form#registerform')。find(':input')。each(function(){
jQuery(this.keyup)(函数(){
typingTimer=setTimeout(doneTyping,doneTypingInterval);
});
jQuery(this).keydown(函数(){
clearTimeout(键入计时器);
});
});
函数doneTyping(){
检查时间=打字计时器;
返回检查时间;
}
jQuery('form#registerform').submit(函数(){
checktime=doneTyping();
var timerInsec=(doneTypingInterval/1000);
如果(检查时间<时间间隔){
返回false;//禁用表单提交
}否则{
//如果用户填写表单的时间超过5秒,请提交表单
返回true;
}
});
});
我需要整合到wordpress的注册表格中,这就是我尝试的原因。 如果有人对此有解决方案,请帮助我。非常感谢


谢谢

这将禁用提交按钮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;
    }
}
if(isset($\u会话['last\u submit\u time'])){
$delay=intval($_SESSION['last_submit_time'])+5;
if(time()<$delay){
$\u会话['last\u submit\u time']=time();
echo“在提交之前,您必须再等待5秒钟。计时器重置。”;
出口
}
}

键入计时器不包含时间,而是包含当前正在计时的计时器的id…而且由于向上键将始终将其设置为某个值,因此它永远不会为false。 此外,还可以为每个输入添加和重置计时器。如果您希望用户至少花5秒钟填写表单,请在5秒钟后再启用“提交”按钮

function doneTyping () {
    checktime = typingTimer;//will always have a value that evaluates to true
    return checktime;
}
试试看。。。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>

垃圾邮件发送者仍然可以提交表单,您必须在服务器端进行检查。此外,有自动输入的表单怎么办?谢谢你的提示,它绝对正确!更新我的答案!谢谢你的回答。我想知道用户得到表单并提交表单的次数,如果少于5秒,请禁用表单提交。类似于此过程。目的是阻止垃圾邮件。所以我使用jquery脚本这样做了。jquery('form#registerform')。find(':input')。each(function(){jquery(this)。keyup(function(e){var submitButton=jquery('form#registerform input[type=“submit”]);submitButton.prop(“disabled”,true);e.preventDefault();setTimeout(function(){submitButton.prop(“disabled”,false);},5000);});});所以它起作用了。如果我将它集成到WordPress注册表单中,最后一次提交的时间是什么?表单提交时,该值会添加到会话中?谢谢。是的,这部分代码应该放在表单处理器中。您应该修改它以满足您的需要并发出用户友好的通知。Sumith,您还必须添加服务器端v验证。请看我的答案!如果您有任何问题,请继续提问!这是从加载页面开始5秒后禁用提交按钮。我想知道用户获得填写表单并提交表单的次数,如果少于5秒,则禁用表单提交。如此过程。旨在停止垃圾邮件。谢谢
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");
});