禁用HTML页面上所有表单的提交功能

时间:2012-04-23 15:41:48

标签: javascript jquery forms

使用.NET Windows Forms WebBrowser control显示页面预览,我使用this SO posting中描述的以下方法来禁用页面上的所有链接:

$(function() {
    $('a').click(function() {
        $(this).attr('href', 'javascript:void(0);');
    });
});

由于我想要作为预览显示的HTML页面也包含HTML表单,我正在寻找一种类似的方法来禁用所有表单提交功能。

我试过了:

$(function() {
    $('form').attr('onsubmit', 'return false');
});

但似乎这不起作用(阅读:“仍然加载页面”)表格如下:

<form id="myform" name="myform" onsubmit="return search()" action="">

我在页面上。

所以我的问题是:

在HTML页面上禁用所有表单提交功能的最佳方法是什么,无论是GET还是POST表单?

8 个答案:

答案 0 :(得分:27)

你应该可以这样做:

$('form').submit(false);

来自jQuery documentation

  

在jQuery 1.4.3中,您现在可以传入false来代替事件   处理程序。这将绑定一个等效于:function(){的事件处理程序   返回false; }。此功能可以在以后删除   调用:.unbind(eventName,false)。

答案 1 :(得分:3)

然后你可以使用..

的组合
$('form :submit').attr("disabled", "disabled");

$('form').unbind('submit');

答案 2 :(得分:3)

您可以停用提交按钮

$('form :submit').attr("disabled", "disabled");

或只是让提交事件无效

$('form').submit(function(e){ e.preventDefault(); });

这取决于你想要达到的目的。

答案 3 :(得分:2)

使用jquery我会这样做

$('form').submit(function(event){event.preventDefault();});

使用jquery你通常不使用.attr(...)绑定事件监听器而应该使用辅助方法,或者.bind(...)

这里是完整的参考:jQuery events

答案 4 :(得分:2)

如果您想阻止表单提交:

我认为,阻止<form>向任何地方发送内容的最佳方法是:

$('form').submit( function(e){ 
    e.preventDefault();
});

这会禁用页面上的所有表单,无需为每个表单单独执行。

JSFiddle演示启用/禁用表单提交:

http://jsfiddle.net/cDLsw/6/

答案 5 :(得分:2)

使用此:

<form id="myform" name="myform" onSubmit="search();return false;" action="">

答案 6 :(得分:0)

使用事件委派来阻止提交正文中的所有表单。

$("body").on("submit", "form", function( event ){
    event.preventDefault();
});

顺便说一下,要禁用页面上所有链接的Javascript代码不是一个好方法。您可以使用类似

的内容
// use "bind" instead of "on" if you use a jQuery version prior to 1.7
$("a").on( "click", function( ev ) {
    ev.preventDefault();
});

// or use event delegation
$("body").on( "click", "a", function( ev ) {
    ev.preventDefault();
});

// the power of event delegation in action:
// disable BOTH links and form with one event handler
$("body").on( "click", "a, form", function( ev ) {
    ev.preventDefault();
});

这是一个有效的演示http://jsfiddle.net/pomeh/TUGAa/

答案 7 :(得分:0)

<style>[busy]{pointer-events:none;}</style>
<form>....</form>
<form>....</form>
<form>....</form>
<script>
function disableIt(node){
    node.setAttribute('busy','');
    // later re-enable with node.removeAttribute('busy')
}
Array.from(document.querySelectorAll('form')).forEach(disableIt);
// NOTE other functions can return on form.hasAttribute('busy') if needed
</script>

我的其他答案有一个更具体的一次性例子:https://stackoverflow.com/a/64831209/965666