Как отменить отправку формы в событии onclick кнопки отправки? - PullRequest
93 голосов
/ 19 ноября 2010

Я работаю над веб-приложением ASP.net.

У меня есть форма с кнопкой отправки. Код для кнопки отправки выглядит как <input type='submit' value='submit request' onclick='btnClick();'>.

Я хочу написать что-то вроде следующего:

function btnClick() {
    if (!validData())
        cancelFormSubmission();
}

Как мне это сделать?

Ответы [ 12 ]

169 голосов
/ 19 ноября 2010

Вам лучше делать ...

<form onsubmit="return isValidForm()" />

Если isValidForm() возвращает false, то ваша форма не отправляется.

Возможно, вам также следует перенести событиеобработчик из встроенного.

document.getElementById('my-form').onsubmit = function() {
    return isValidForm();
};
40 голосов
/ 19 ноября 2010

Измените ваш ввод на это:

<input type='submit' value='submit request' onclick='return btnClick();'>

И вернуть false в вашей функции

function btnClick() {
    if (!validData())
        return false;
}
12 голосов
/ 19 ноября 2010

Вам нужно изменить

onclick='btnClick();'

до

onclick='return btnClick();'

и

cancelFormSubmission();

до

return false;

Тем не менее, я бы постарался избежать внутренних атрибутов событий в пользу ненавязчивого JS с библиотекой (такой как YUI или jQuery), которая имеет хороший API для обработки событий и привязан к событию действительно имеет значение (то есть событие отправки формы вместо события нажатия кнопки).

6 голосов
/ 09 октября 2015

Иногда onsubmit не будет работать с asp.net.

Я решил это очень простым способом.

если у нас есть такая форма

<form method="post" name="setting-form" >
   <input type="text" id="UserName" name="UserName" value="" 
      placeholder="user name" >
   <input type="password" id="Password" name="password" value="" placeholder="password" >
   <div id="remember" class="checkbox">
    <label>remember me</label>
    <asp:CheckBox ID="RememberMe" runat="server" />
   </div>
   <input type="submit" value="login" id="login-btn"/>
</form>

Теперь вы можете поймать получить это событие перед обратной передачей формы и остановить его от обратной передачи и выполнить все необходимые действия, используя этот jquery.

$(document).ready(function () {
            $("#login-btn").click(function (event) {
                event.preventDefault();
                alert("do what ever you want");
            });
 });
5 голосов
/ 11 сентября 2012

вы должны изменить тип с submit на button:

<input type='button' value='submit request'>

вместо

<input type='submit' value='submit request'>

затем вы получаете название своей кнопки в javascript и связываете любое действие, которое вы хотите с ней

var btn = document.forms["frm_name"].elements["btn_name"];
btn.onclick = function(){...};

работал на меня надеюсь, это поможет.

4 голосов
/ 19 ноября 2010

Вам нужно return false;:

<input type='submit' value='submit request' onclick='return btnClick();' />

function btnClick() {
    return validData();
}
1 голос
/ 31 марта 2013

Все просто, просто верните false;

Приведенный ниже код вводится нажатием кнопки отправки с помощью jquery

1 голос
/ 19 ноября 2010

Почему бы не изменить кнопку отправки на обычную кнопку, а в случае нажатия кнопки отправить свою форму, если она прошла ваши проверочные тесты?

* 1003 например *

<input type='button' value='submit request' onclick='btnClick();'>

function btnClick() { 
    if (validData()) 
        document.myform.submit();
} 
0 голосов
/ 14 августа 2018
<input type='button' onclick='buttonClick()' />

<script>
function buttonClick(){
    //Validate Here
    document.getElementsByTagName('form')[0].submit();
}
</script>
0 голосов
/ 19 ноября 2010

Вам нужно onSubmit.Не onClick, иначе кто-то может просто нажать клавишу ввода, и он пропустит вашу проверку.Что касается отмены.вам нужно вернуть false.Вот код:

<form onSubmit="return btnClick()">
<input type='submit' value='submit request'>

function btnClick() {
    if (!validData()) return false;
}

Редактировать onSubmit принадлежит в теге формы.

...