【问题标题】:properly disabling the submit button正确禁用提交按钮
【发布时间】:2009-05-24 11:12:58
【问题描述】:
这是我用来禁用按钮的代码
$("#btnSubmit").attr('disabled', 'disabled')
$("#btnSubmit").disabled = true;
这是我的提交按钮
<input id="btnSubmit" class="grayButtonBlueText" type="submit" value="Submit" />
该按钮虽然看起来已禁用,但您仍然可以单击它.. 这是用 FF 3.0 和 IE6 测试的
我在这里做错了吗?
【问题讨论】:
标签:
javascript
jquery
html
【解决方案1】:
如果它是一个真实的表单,即不是javascript事件处理,这应该可以工作。
如果您使用 onClick 事件处理按钮,您会发现它可能仍会触发。如果你这样做,你最好在你的 JS 中设置一个变量,比如 buttonDisabled 并在处理 onClick 事件时检查该变量。
否则试试
$(yourButton).attr("disabled", "true");
如果在所有这些之后,你仍然一无所获,你可以使用 jquery 手动“打破”按钮(现在这变得越来越严重了):
$(submitButton).click(function(ev) {
ev.stopPropagation();
ev.preventDefault();
});
这应该会阻止按钮像按钮一样工作。
【解决方案2】:
根据表单提交的处理方式,您可能还需要删除任何单击处理程序和/或添加一个中止提交的处理程序。
$('#btnSubmit').unbind('click').click( function() { return false; } );
当(如果)您重新启用按钮时,您必须再次添加点击处理程序。
【解决方案3】:
您需要在浏览器中处理 Back/Prev 按钮。
示例如下
1) 创建form.js:
(function($) {
$.enhanceFormsBehaviour = function() {
$('form').enhanceBehaviour();
}
$.fn.enhanceBehaviour = function() {
return this.each(function() {
var submits = $(this).find(':submit');
submits.click(function() {
var hidden = document.createElement('input');
hidden.type = 'hidden';
hidden.name = this.name;
hidden.value = this.value;
this.parentNode.insertBefore(hidden, this)
});
$(this).submit(function() {
submits.attr("disabled", "disabled");
});
$(window).unload(function() {
submits.removeAttr("disabled");
})
});
}
})(jQuery);
2) 添加到您的 HTML:
<script type="text/javascript">
$(document).ready(function(){
$('#contact_frm ).enhanceBehaviour();
});
</script>
<form id="contact_frm" method="post" action="/contact">
<input type="submit" value="Send" name="doSend" />
</form>
完成:)