Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.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
Jquery 禁用提交按钮4小时_Jquery_Asp.net Mvc_Session Variables_Disabled Input - Fatal编程技术网

Jquery 禁用提交按钮4小时

Jquery 禁用提交按钮4小时,jquery,asp.net-mvc,session-variables,disabled-input,Jquery,Asp.net Mvc,Session Variables,Disabled Input,我已经构建了一个ASP.NETMVC5应用程序。在其中一个Razor视图中,我有一个提交按钮,用户可以单击该按钮发送电子邮件和文本消息。但是,当用户单击Submit按钮时,发送消息可能需要10秒或15秒。由于此时间延迟,用户有时会多次单击“提交”按钮,认为第一次单击“提交”按钮不起作用。即使向用户显示警告信息,而不是多次单击Submit按钮,他们仍然会这样做 我现在想禁用提交按钮4小时。我可以使用一些JQuery禁用submit按钮 $('#myButton').prop('disabled',

我已经构建了一个ASP.NETMVC5应用程序。在其中一个Razor视图中,我有一个提交按钮,用户可以单击该按钮发送电子邮件和文本消息。但是,当用户单击Submit按钮时,发送消息可能需要10秒或15秒。由于此时间延迟,用户有时会多次单击“提交”按钮,认为第一次单击“提交”按钮不起作用。即使向用户显示警告信息,而不是多次单击Submit按钮,他们仍然会这样做

我现在想禁用提交按钮4小时。我可以使用一些JQuery禁用submit按钮

$('#myButton').prop('disabled', true);
但是,这没有多大帮助,因为如果用户重新访问页面或刷新页面,可以再次单击按钮。相反,我希望从最初单击Submit按钮时起,将其禁用4小时

我真的不确定做这件事的最好方法是什么。我知道我可以在我的数据库中存储按钮被点击的日期和时间,并对其进行验证,但我不确定这是否是最好的方法。也许可以使用会话变量

以前有没有人遇到过这样的情况?如有任何建议,将不胜感激


谢谢。

下面是一个禁用按钮3秒钟的示例

$('enter')。在('click',function()上{
document.getElementById(“enter”).disabled=true;
setInterval(函数(){document.getElementById(“enter”).disabled=false;},3000);
});


试试看
以下代码正在执行您想要的操作

单击该按钮时,该按钮将被禁用,并使用当前时间戳设置cookie

如果用户停留在页面上,则该按钮将在超时变量中设置的时间后启用

如果用户没有留下,时间戳将从cookie中读取,并启动一个新的计时器,这将在四个小时过去后立即启用按钮

这是相关的jQuery代码:

var timeout = 4 * 60 * 60 * 1000; // 4 Hours * 60 Minutes * 60 Seconds * to Milliseconds
if (Cookies.get('disabledBtn') !== undefined) {
  $('#myButton').prop('disabled', true);
  var cookieSet = Cookies.get('disabledBtn');
  var delay = timeout - ($.now() - cookieSet);
  setInterval(function() {
    $('#myButton').prop('disabled', false);
    Cookies.remove('disabledBtn');
  }, delay);
}

$('#myButton').on('click', function() {
  $(this).prop('disabled', true);
  Cookies.set('disabledBtn', $.now());

  setInterval(function() {
    $('#myButton').prop('disabled', false);
    Cookies.remove('disabledBtn');
  }, timeout);
});


JSFIDLE中还有一个删除Cookie的按钮,显然您不需要该按钮和点击侦听器。

客户端页面不会(也不应该)有4小时的生存期。要做到这一点,最好在按钮再次可用时(在本地存储、会话或服务器端数据存储中)存储一个时间戳,然后在客户端定期检查该日期的传递。您的按钮是服务器控件吗,如
?如果是这种情况,您可以在控件的
page_Init
方法中加载页面时,在4小时未过的情况下,实现逻辑以禁用按钮,并立即通过jQuery禁用它,就像您已经禁用一样。@Zack这是一个MVC应用程序,因此没有服务器控件。@tgriffiths我很确定这两者不是互斥的。可能有某种方法可以从服务器代码中禁用按钮。4小时发生了什么事?我希望他能够将时间更改为他想要的任何时间,3秒用于测试目的,以查看这是否是他想要的,而不是使用4小时(144000000)进行测试。如果用户从不更改页面,这非常有效,但是OP明确询问了如何处理这是一种有状态的方式,以及如何最好地做到这一点,以考虑页面重新加载使用cookies:,但我的回答是解决“当用户单击“提交”按钮时,发送消息可能需要10秒或15秒。由于这一时间延迟,用户有时会多次单击“提交”按钮,认为第一次单击“提交”按钮不起作用。”@depperm提问者已经有了一个可行的解决方案,可以在单击后立即禁用按钮,因此我认为您的回答没有用。