单击后如何禁用提交按钮?

时间:2010-07-29 20:50:21

标签: javascript jquery html jsp form-submit

我在表单的末尾有一个提交按钮。

我在提交按钮中添加了以下条件:

onClick="this.disabled=true;
this.value='Sending…';
this.form.submit();"

但是当它移动到下一页时,参数没有通过,并且传递了空值。

19 个答案:

答案 0 :(得分:79)

您应首先提交表单,然后更改提交的值:

onClick="this.form.submit(); this.disabled=true; this.value='Sending…'; "

答案 1 :(得分:43)

可能你要两次提交表格。 移除this.form.submit()或在末尾添加return false

你应该以{{1​​}}

结束

答案 2 :(得分:9)

当您提交表单时,禁用的HTML表单元素不会与发布/获取值一起发送。因此,如果您单击后禁用提交按钮并且此提交按钮设置了name属性,则不会在post / get值中发送它,因为该元素现在已禁用。这是正常行为。

解决此问题的一种方法是使用隐藏的表单元素。

答案 3 :(得分:8)

在IE11,FF53,GC58上测试:

onclick="var e=this;setTimeout(function(){e.disabled=true;},0);return true;"

答案 4 :(得分:5)

诀窍是延迟按钮被禁用,并提交您可以使用的表单 window.setTimeout('this.disabled=true',0); 是的,即使0 MS正在工作

答案 5 :(得分:4)

使用JQuery,你可以这样做..

$("#submitbutton").click(
   function() {
      alert("Sending...");
      window.location.replace("path to url");
   }
);

答案 6 :(得分:3)

您需要在onsubmit的{​​{1}}事件中禁用按钮:

<form>

注意:这样,如果您有一个具有<form action='/' method='POST' onsubmit='disableButton()'> <input name='txt' type='text' required /> <button id='btn' type='submit'>Post</button> </form> <script> function disableButton() { var btn = document.getElementById('btn'); btn.disabled = true; btn.innerText = 'Posting...' } </script> 属性的表单元素,那么它将起作用。

答案 7 :(得分:2)

我认为你不需要this.form.submit()。应该运行禁用代码,然后它将传递点击该表单的点击。

答案 8 :(得分:1)

如果禁用该按钮,则其名称=值对确实不会作为参数发送。但是应该发送参数的残余(只要它们各自的输入元素和父形式没有被禁用)。你可能只是在测试按钮,或者其他输入字段甚至表单都被禁用了?

答案 9 :(得分:1)

我使用的另一个解决方案是移动按钮而不是禁用它。在这种情况下,你没有那些“禁用”问题。 最后你真正想要的是人们不要按两次,如果按钮不在那里他们就不能这样做。

您也可以用其他按钮替换它。

答案 10 :(得分:1)

function xxxx() {
// submit or validate here , disable after that using below
  document.getElementById('buttonId').disabled = 'disabled';
  document.getElementById('buttonId').disabled = '';
}

答案 11 :(得分:0)

$('form#id').submit(function(e){
//OnClick code 
$(this).children('input[type=submit]').attr('disabled','disabled');
e.preventDefault();
return false;
});

答案 12 :(得分:0)

在这个工作示例中,用户使用JavaScript确认他确实要中止。如果为true,则禁用该按钮以防止双击,然后将运行更新数据库的代码。

<asp:button id="btnAbort" runat="server" OnClick="btnAbort_Click" OnClientClick="if (!abort()) {return false;};" UseSubmitBehavior="false" text="Abort" ></asp:button>

我遇到了问题,因为.net可以更改按钮的名称

function abort() {
    if (confirm('<asp:Literal runat="server" Text="Do you want to abort?" />')) {
        var btn = document.getElementById('btnAbort');
        btn.disabled = true;
        btn.innerText = 'Aborting...'
        return true;
    }
    else {
        return false;
    }  
}

因为您用OnClientClick覆盖了OnClick,所以即使您的验证方法成功,其背后的代码也无法正常工作。这就是为什么将UseSubmitBehavior设置为false使其起作用的原因

PS:如果您的代码位于vb.net中,则不需要OnClick!

答案 13 :(得分:0)

我做了伎俩。设置超时时,它可以正常工作并发送所有值。

    $(document).ready(function () {
        document.getElementById('btnSendMail').onclick = function () {
            setTimeout(function () {
                document.getElementById('btnSendMail').value = 'Sending…';
                document.getElementById('btnSendMail').disabled = true;
            }, 850);
        }
    });

答案 14 :(得分:0)

我认为禁用按钮的简便方法是:data => { disable_with: "Saving.." } 这将提交一个表单,然后禁用按钮,如果您有任何验证,如required = 'required'.

,它也不会禁用按钮

答案 15 :(得分:0)

以下是扩展AndreasKöberle解决方案的简介示例。它使用jQuery作为事件处理程序和文档就绪事件,但那些可以切换到普通JS:

(function(document, $) {

  $(function() {
    $(document).on('click', '[disable-on-click], .disable-on-click', function() {
      var disableText = this.getAttribute("data-disable-text") || 'Processing...';

      if(this.form) {
        this.form.submit();
      }

      this.disabled = true;

      if(this.tagName === 'BUTTON') {
        this.innerHTML = disableText;
      } else if(this.tagName === 'INPUT') {
        this.value = disableText;
      }
    });
  });

})(document, jQuery);

然后可以在HTML中使用它:

<button disable-on-click data-disable-text="Saving...">Click Me</button>
<button class="disable-on-click">Click Me</button>
<input type="submit" disable-on-click value="Click Me" />

答案 16 :(得分:0)

就我而言,这是必要的。

Disable submit button on form submit

在没有它的情况下,它在Internet Explorer和Firefox中运行良好,但它在Google Chrome中无效。

问题是您在实际触发提交事件之前禁用了该按钮。

答案 17 :(得分:0)

 
    A better trick, so you don't lose the value of the button is

    function showwait() {
    document.getElementById('WAIT').style['display']='inline';
    document.getElementById('BUTTONS').style['display']='none';
    }
 

将代码包装在div中显示

id = WAIT style =“display:none”&gt;要显示的文本(结束div)

将代码隐藏在div中

id = BUTTONS style =“display:inline”&gt; ...按钮或任何隐藏的内容                                              的onclick = “showwait();”    (结束div)

答案 18 :(得分:0)

你的问题很混乱,你真的应该发布一些代码,但这应该有效:

onClick="this.disabled=true; this.value='Sending...'; submitForm(); return false;"

我认为当你使用this.form.submit()时,它正在做你点击提交按钮时自然发生的事情。如果你想要同页提交,你应该考虑在submitForm()方法(上面)中使用AJAX。

此外,在false属性值的末尾返回onClick会禁止触发默认事件(在这种情况下提交表单)。