我在表单的末尾有一个提交按钮。
我在提交按钮中添加了以下条件:
onClick="this.disabled=true;
this.value='Sending…';
this.form.submit();"
但是当它移动到下一页时,参数没有通过,并且传递了空值。
答案 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
会禁止触发默认事件(在这种情况下提交表单)。