如何防止表单被提交?

时间:2010-07-28 05:54:54

标签: javascript html forms

我的表单中有一个提交按钮。

但是,我想以某种方式'抓住'提交事件并阻止它发生。

我有什么方法可以做到这一点吗?

我无法修改提交按钮,因为它是自定义控件的一部分。

9 个答案:

答案 0 :(得分:211)

与其他答案不同,返回false只是答案的部分。考虑在return语句之前发生JS错误的场景......

<强> HTML

<form onsubmit="return mySubmitFunction(event)">
  ...
</form>

<强>脚本

function mySubmitFunction()
{
  someBug()
  return false;
}

此处返回false将不会被执行,表单将以任一方式提交。您还应该调用preventDefault来阻止Ajax表单提交的默认表单操作。

function mySubmitFunction(e) {
  e.preventDefault();
  someBug();
  return false;
}

在这种情况下,即使有错误,表单也不会提交!

或者,可以使用try...catch块。

function mySubmit(e) { 
  e.preventDefault(); 
  try {
   someBug();
  } catch (e) {
   throw new Error(e.message);
  }
  return false;
}

答案 1 :(得分:133)

您可以像这样使用内联事件onsubmit

<form onsubmit="alert('stop submit'); return false;" >

或者

<script>
   function toSubmit(){
      alert('I will not submit');
      return false;
   }
</script>

<form onsubmit="return toSubmit();" >

Demo

现在,在制作大型项目时,这可能不是一个好主意。您可能需要使用事件监听器。

read more about Inline Events vs Event Listeners (addEventListener and IE's attachEvent) here。因为我无法解释它比Chris Baker更多。

  

两者都是正确的,但它们本身都不是“最好的”,并且可能存在   开发人员选择使用这两种方法的原因。

答案 2 :(得分:13)

试试这个...

HTML代码

<form class="submit">
    <input type="text" name="text1"/>
    <input type="text" name="text2"/>
    <input type="submit" name="Submit" value="submit"/>
</form>

jQuery代码

$(function(){
    $('.submit').on('submit', function(event){
        event.preventDefault();
        alert("Form Submission stopped.");
    });
});

$(function(){
    $('.submit').on('submit', function(event){
       event.preventDefault();
       event.stopPropagation();
       alert("Form Submission prevented / stopped.");
    });
});

答案 3 :(得分:10)

以下作品截至目前(在chrome和firefox中测试过):

<form onsubmit="event.preventDefault(); return validateMyForm();">

其中validateMyForm()是一个函数,如果验证失败则返回false。关键是使用名称event。我们不能用于例如e.preventDefault()

答案 4 :(得分:8)

var form = document.getElementById("idOfForm");
form.onsubmit = function() {
  return false;
}

答案 5 :(得分:2)

为防止提交表单,您只需要这样做。

<form onsubmit="event.preventDefault()">
    .....
</form>

通过使用以上代码,这将阻止您提交表单。

答案 6 :(得分:0)

要遵循unobtrusive JavaScript编程惯例,并根据DOM加载的速度,最好使用以下内容:

<form onsubmit="return false;"></form>

如果您正在使用库,则使用onload或DOM准备好事件。

&#13;
&#13;
$(function() {
    var $form = $('#my-form');
    $form.removeAttr('onsubmit');
    $form.submit(function(ev) {
        // quick validation example...
        $form.children('input[type="text"]').each(function(){
            if($(this).val().length == 0) {
                alert('You are missing a field');
                ev.preventDefault();
            }
        });
    });
});
&#13;
label {
    display: block;
}

#my-form > input[type="text"] {
    background: cyan;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="my-form" action="http://google.com" method="GET" onsubmit="return false;">
    <label>Your first name</label>
    <input type="text" name="first-name"/>
    <label>Your last name</label>
    <input type="text" name="last-name" /> <br />
    <input type="submit" />
</form>
&#13;
&#13;
&#13;

另外,我总是使用action属性,因为有些人可能会运行一些像NoScript这样的插件,这会破坏验证。如果您正在使用action属性,则至少您的用户将根据后端验证重定向服务器。另一方面,如果您使用window.location之类的东西,事情会很糟糕。

答案 7 :(得分:0)

这是我的答案:

<form onsubmit="event.preventDefault();searchOrder(event);">
...
</form>
<script>
const searchOrder = e => {
    e.preventDefault();
    const name = e.target.name.value;
    renderSearching();

    return false;
}
</script>

我在event.preventDefault();上添加了onsubmit,它可以正常工作。

答案 8 :(得分:0)

您可以将eventListner添加到preventDefault()表单中,并将表单数据转换为JSON,如下所示:

const formToJSON = elements => [].reduce.call(elements, (data, element) => {
  data[element.name] = element.value;
  return data;

}, {});

const handleFormSubmit = event => {
    event.preventDefault();
    const data = formToJSON(form.elements);
    console.log(data);
  //  const odata = JSON.stringify(data, null, "  ");
  const jdata = JSON.stringify(data);
    console.log(jdata);

    (async () => {
      const rawResponse = await fetch('/', {
        method: 'POST',
        headers: {
          'Accept': 'application/json',
          'Content-Type': 'application/json'
        },
        body: jdata
      });
      const content = await rawResponse.json();

      console.log(content);
    })();
};

const form = document.forms['myForm']; 
form.addEventListener('submit', handleFormSubmit);
<form id="myForm" action="/" method="post" accept-charset="utf-8">
    <label>Checkbox:
        <input type="checkbox" name="checkbox" value="on">
    </label><br /><br />

    <label>Number:
        <input name="number" type="number" value="123" />
    </label><br /><br />

    <label>Password:
        <input name="password" type="password" />
    </label>
    <br /><br />

    <label for="radio">Type:
        <label for="a">A
            <input type="radio" name="radio" id="a" value="a" />
        </label>
        <label for="b">B
            <input type="radio" name="radio" id="b" value="b" checked />
        </label>
        <label for="c">C
            <input type="radio" name="radio" id="c" value="c" />
        </label>
    </label>
    <br /><br />

    <label>Textarea:
        <textarea name="text_area" rows="10" cols="50">Write something here.</textarea>
    </label>
    <br /><br />

    <label>Select:
        <select name="select">
            <option value="a">Value A</option>
            <option value="b" selected>Value B</option>
            <option value="c">Value C</option>
        </select>
    </label>
    <br /><br />

    <label>Submit:
        <input type="submit" value="Login">
    </label>
    <br /><br />


</form>