Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery禁用表单中PHP函数的双击功能_Javascript_Php_Jquery_Html_Forms - Fatal编程技术网

Javascript jQuery禁用表单中PHP函数的双击功能

Javascript jQuery禁用表单中PHP函数的双击功能,javascript,php,jquery,html,forms,Javascript,Php,Jquery,Html,Forms,我有一个无法解决的jquery错误,希望能得到解决方案方面的帮助。不知道它是与浏览器错误相关(可能不是)、与jQuery相关还是与Yii(我们的后端)相关——但我需要尝试用jQuery部分来解决它。消息底部的代码 要求:禁用表单上的意外重复提交 当前解决方案:通过委托检查表单提交状态,当DOM表单状态更改为提交时-将禁用属性附加到表单提交按钮,以防止表单提交意外 jQuery双击禁用器: $( document ).ready(function() { $('html').delegate('f

我有一个无法解决的jquery错误,希望能得到解决方案方面的帮助。不知道它是与浏览器错误相关(可能不是)、与jQuery相关还是与Yii(我们的后端)相关——但我需要尝试用jQuery部分来解决它。消息底部的代码

要求:禁用表单上的意外重复提交

当前解决方案:通过委托检查表单提交状态,当DOM表单状态更改为提交时-将禁用属性附加到表单提交按钮,以防止表单提交意外

jQuery双击禁用器:

$( document ).ready(function() {
$('html').delegate('form', 'submit', function() {
$(this).find(':submit').attr('disabled', true);
});
});
<form action = "<?=$clockUrl?>" method = "post" >
<input type = "hidden" name = "previousUrl" value = "<?=$currentUrl?>">
<?php if ($sessionVar->timeclockin) {?>
<input type = "submit" name = "submit-clockout" value = "Out">
<class="clock-time" ><?=$sessionVar->timeclockin?></class="clock-time">
<?php } else {?>
<input type = "submit" name = "submit-clockin" value = "In">
<?php }?>
</form>
问题:这在我们正在开发的CRM的每个部分都能完美地工作,除了一个计时器(时钟输入/时钟输出)功能。使用计时器,表单有两个提交按钮(一个用于输入时钟,一个用于输出时钟)。一次只显示一个提交按钮(输入或输出)。当您单击按钮时-它会提交表单,并通过检查会话变量将提交按钮更改为其他状态,以确定其处于何种状态,并确定将显示两个提交按钮中的哪一个。问题是,如果您单击该按钮,表单会显示为提交,但状态不会更改。如果您多次快速单击该按钮,则您可以让它更改状态。我怀疑这是一个操作的时间或顺序问题,但我不知道如何修复它。修复必须在前端完成,因此下面是代码(PHP受到影响和jQuery双击预防)。也许禁用双重提交的另一种方法可能会起作用,如果您需要尝试,请发布您的解决方案。注释掉当前的jQuery可使表单按设计运行。这可能是什么原因造成的,我如何更改jQuery双击预防以解决此问题

在PHP页面上显示时钟:

$( document ).ready(function() {
$('html').delegate('form', 'submit', function() {
$(this).find(':submit').attr('disabled', true);
});
});
<form action = "<?=$clockUrl?>" method = "post" >
<input type = "hidden" name = "previousUrl" value = "<?=$currentUrl?>">
<?php if ($sessionVar->timeclockin) {?>
<input type = "submit" name = "submit-clockout" value = "Out">
<class="clock-time" ><?=$sessionVar->timeclockin?></class="clock-time">
<?php } else {?>
<input type = "submit" name = "submit-clockin" value = "In">
<?php }?>
</form>

更新1:

$( document ).ready(function() {
$('html').delegate('form', 'submit', function() {
$(this).find(':submit').attr('disabled', true);
});
});
<form action = "<?=$clockUrl?>" method = "post" >
<input type = "hidden" name = "previousUrl" value = "<?=$currentUrl?>">
<?php if ($sessionVar->timeclockin) {?>
<input type = "submit" name = "submit-clockout" value = "Out">
<class="clock-time" ><?=$sessionVar->timeclockin?></class="clock-time">
<?php } else {?>
<input type = "submit" name = "submit-clockin" value = "In">
<?php }?>
</form>
如果您希望在onclick或submit函数中防止按钮被按下两次,则应使用类似于以下内容的功能:

$('#yourButton').prop('disabled', true);
如果页面随后重定向,则不必撤消此操作。如果撤消,则通过将true更改为false来执行相反的操作


submit函数应该禁用submit按钮,直到它返回或失败


另一种方法是使用lambda样式的函数,并暂时用空函数替换它,直到请求返回或失败。

感谢您为我指明了正确的方向Tyler!我通过以下对脚本的修改解决了问题

    function do_nothing() {
    console.log("click prevented");
    return false;
    }

    $('html').delegate('form', 'submit', function(e) {
       $(e.target).find(':submit').click(do_nothing);
       setTimeout(function(){
       $(e.target).unbind('click', do_nothing);
       }, 10000);
    });

页面在提交时完全重新加载,因此在页面重新加载之前,页面仅处于禁用状态。当页面重新加载时,按钮返回默认启用状态-因此,在单击提交和页面刷新之间的某个时间出现此问题-几乎就好像表单在提交时没有实际发送关于按钮是什么的信息一样实际点击。你有你建议的代码示例吗?如果你愿意,我可以生成一些。