繁体   English   中英

如何暂时禁用提交按钮3秒(onsubmit),然后重新启用它?

[英]How do I temporarily disable a submit button for 3 seconds (onsubmit), then re-enable it?

我是一个相当新的使用JavaScript,这是我到目前为止:

<!-- this is to disable the submit button and then re-enable it after 3 sec -->

<script type="text/javascript">

    function enable()
    {
    var x = document.LAYOUTFORM.getElementById("create_button");
    setTimeout(x.removeAttribute("disabled"), 3000);
    }

</script>

对于按钮我有这个:

<INPUT TYPE="SUBMIT" VALUE=" Create PDF " class="FORMBUTTON" ID="create_button" onclick="javascript:this.disabled=true;javascript:enable();">

我已经搞砸了好几个小时,你们大多数人都会看着它,立即知道出了什么问题。 我的表单ID和名称是LAYOUTFORM。 谁能告诉我这里做错了什么?

对于奖励积分,我还希望按钮的文本在禁用时暂时更改为“正在创建...”,然后再次返回到创建PDF。

最简单的方法:

<input ... onclick="lockoutSubmit(this)">

在你的javascript中:

function lockoutSubmit(button) {
    var oldValue = button.value;

    button.setAttribute('disabled', true);
    button.value = '...processing...';

    setTimeout(function(){
        button.value = oldValue;
        button.removeAttribute('disabled');
    }, 3000)
}

您可以通过全局唯一的id或封闭表单的唯一name来访问该按钮

所以你必须要么

var x = document.getElementById("create_button");

要么

var x = document.LAYOUTFORM.elements["create_button_name"];

(假设create_button_name是按钮的名称:

<input type="submit" value=" Create PDF " id="create_button" name="create_button_name"  class="formButton" onclick="javascript:this.disabled=true;javascript:enable();">

setTimeout的第一个参数应该是一个函数:

setTimeout(removeAttr, 3000);

function removeAttr() {
    x.removeAttribute("disabled")
}

顺便说一下,HTML不一定(也不应该是,为了可读性等)都是大写的。

删除文档和getElementById之间的LAYOUTFORM。

只是一个fyi,使用firebug,chrome开发工具,或者IE的等效工具,你可以在控制台上使用你的javascript。 Console.log还将输出您可以检查的文本甚至对象(在CDT中)。 非常有用的探索:)

几个问题。 首先,在onclick属性中,您使用javascript:这是用于URL。 onclick属性中的东西已经被评估为代码。 其次,setTimeout中的代码应该是字符串或函数名。 你应该做更像这样的事情:

HTML:

<INPUT TYPE="SUBMIT" VALUE=" Create PDF " class="FORMBUTTON" ID="create_button" onclick="disable();">

JavaScript的:

<script type="text/javascript">

    function disable() {
        x=document.getElementById("createbutton");
        x.disabled=true;
        x.value="Creating...";
        setTimeout(enable, 3000);
    }

    function enable() {
        x.disabled=false;
        x.value=" Create PDF ";
    }

</script>

您的JavaScript有两个主要问题:

  1. .getElementById()方法属于document ,而不属于您的表单(或任何其他)元素。

  2. setTimeout()期望第一个参数是一个函数(或一个字符串,但是在使用字符串时几乎不会出现这种情况)。

试试这个:

function enable() {
    var x = document.getElementById("create_button");
    setTimeout(function() {
       x.removeAttribute("disabled");
    }, 3000);
}

您可能希望将禁用和重新启用组合到一个功能中:

<INPUT TYPE="SUBMIT" ... onclick="temporaryDisable(this);">

function temporaryDisable(el) {
    el.disabled = true;
    setTimeout(function() {
       el.disabled = false;
    }, 3000);
}

请注意,您不需要使用.removeAttribute() ,您可以直接设置.disabled属性(就像您在禁用元素时已经在做的那样)。

编辑:刚刚看到你的问题的“奖励积分”部分。 您只需要设置.value属性:

function temporaryDisable(el) {
    var oldLabel = el.value;
    el.value = "Creating...";
    el.disabled = true;

    setTimeout(function() {
       el.disabled = false;
       el.value = oldLabel;
    }, 3000);
}
<script type="text/javascript">
function disDelay(obj){
obj.setAttribute('disabled','disabled');
setTimeout(function(){obj.removeAttribute('disabled')},30000)
}
</script>

<input type="submit" value="Submit" onclick="disDelay(this)">

http://www.webdeveloper.com/forum/showthread.php?164239-Temporarily-Disable-Submit-Button

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM