15

使用.NET Windows FormsWebBrowser控件来显示页面的预览,我使用此 SO 发布中描述的以下方法来禁用页面上的所有链接:

$(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 表单?

4

8 回答 8

34

你应该能够做到:

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

jQuery 文档

在 jQuery 1.4.3 中,您现在可以传入 false 来代替事件处理程序。这将绑定一个事件处理程序,相当于: function(){ return false; }。稍后可以通过调用:.unbind( eventName, false ) 删除此函数。

于 2012-04-23T15:45:01.837 回答
11

用这个:

<form id="myform" name="myform" onSubmit="search();return false;" action="">
于 2017-04-29T10:16:57.737 回答
3

使用 jquery 我会这样做

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

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

这里是完整的参考:jQuery 事件

于 2012-04-23T15:46:50.030 回答
3

然后你可以使用组合..

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

$('form').unbind('submit');
于 2012-04-23T15:49:21.740 回答
3

您可以禁用提交按钮

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

或者只是让提交事件什么都不做

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

这取决于您到底想达到什么目标。

于 2012-04-23T15:52:43.753 回答
2

如果您想阻止表单提交:

我认为防止<form>将任何东西发送到任何地方的最佳方法是:

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

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

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

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

于 2012-04-23T16:06:41.467 回答
1

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

$("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/

于 2012-04-23T15:50:09.073 回答
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

于 2020-11-14T05:29:27.497 回答