Як скасувати подання форми у події натискання кнопки onclick?


99

Я працюю над веб-додатком ASP.net.

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

Я хочу написати щось на зразок наступного:

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

Як це зробити?


ой, це болить мені голова. У мене є кілька різних submitвходів. Думаю, я спробую використовувати елементи керування на стороні сервера на цій сторінці.
Вівіан Рівер

2

Відповіді:


183

Вам краще робити ...

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

Якщо isValidForm()повернеться false, то ваша форма не надсилається.

Ви, ймовірно, також повинні перемістити обробник подій з рядка.

document.getElementById('my-form').onsubmit = function() {
    return isValidForm();
};

Приємно, але здається, що я не можу onsubmitпрацювати, коли я використовую ASP.net, тому що asp.net загортає ВСЕ у власному вигляді ...
Вівіан Рівер

5
Ви можете використовувати його другу пропозицію. Вбудований javascript все-таки є дияволом.
Стівен

3
Якщо ви використовуєте веб-форми ASP.NET (підказка: не), не намагайтеся включати інші форми. Вони просто несумісні. Я чую, що ASP.NET MVC дозволяє створювати веб-програми за допомогою ідіоматичної розмітки.
Квентін

@David, якщо використання інших форм несумісне з веб-формами ASP.net, то чи слід використовувати лише керування на серверній основі?
Вівіан Рівер

2
Хтось ще відповів ТОЧНО, як Ви stackoverflow.com/a/23604664/1639385 . Я думаю, це було занадто великим збігом обставин.
Улісс Алвес

43

Змініть свій внесок до цього:

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

І поверніть помилкове у своїй функції

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

13

Вам потрібно змінити

onclick='btnClick();'

до

onclick='return btnClick();'

і

cancelFormSubmission();

до

return false;

З цього приводу я намагаюся уникати властивостей атрибутів подій на користь ненав'язливого JS з бібліотекою (наприклад, YUI або jQuery), яка має хороший API подій та прив'язується до події, яка дійсно має значення (тобто замість подання події форми події натискання кнопки).


2
Використання onclick дозволить користувачеві натиснути на вхід та обійти чек.
Cfreak

7

Іноді 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

слід змінити тип з 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

Вам потрібно return false;:

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

function btnClick() {
    return validData();
}

1

Чому б не змінити кнопку подання на звичайну кнопку, а на події клацання подати форму, якщо вона пройде ваші тести перевірки?

напр

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

function btnClick() { 
    if (validData()) 
        document.myform.submit();
} 

1
Натискання клавіші Enter обійде чек. Використовуйте onSubmit
Cfreak

Тоді він взагалі не працюватиме, якщо JavaScript недоступний. <a href=" icant.co.uk/articles/pragmatic-progressive-enhancement/… про речі, які працюють</a>.
Квентін

1

Вам потрібно onSubmit. Чи не onClickінакше хто - то може просто натисніть клавішу введення , і він буде обходити вашу перевірку. Щодо скасування. вам потрібно повернути помилкове. Ось код:

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

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

Правка onSubmit належить до тегу форми.


це не спрацює. якщо дані дійсні, ви не повертаєте правду. поставити повернення правдою; наприкінці функції btnClick ()
NickSoft

1

Це просто, просто поверніть помилкове;

Наведений нижче код знаходиться в межах натискання кнопки подання за допомогою jquery ..

if(conditionsNotmet)
{
return false;
}

0

використання onclick='return btnClick();'

і

function btnClick() {
    return validData();
}

2
натискання клавіші Enter обійде чек. Використовуйте onSubmit
Cfreak

0
function btnClick() {
    return validData();
}

1
Потрібно зробити більше, ніж це, щоб він працював. Я спробував зробити повернення функтино правдивим чи хибним, але, схоже, це не має ніякого значення.
Вівіан-Рівер

1
Його відповідь правильна. Отримано. Ви також повинні повернути його у вхідний тег
Cfreak

1
Крім того, я вважаю за краще використовувати ev.preventDefault()або ev.returnValue = falseскасовувати поведінку за замовчуванням, але не запобігати виникненню бульбашок подій, якщо інші елементи керування спостерігають ту саму подію на одному елементі. Використовуйте return falseлише тоді, коли ви хочете зупинити подію з бульбашкою та скасувати дію за замовчуванням. Дивіться цю статтю .
Клемен Славич

Необхідно повернути його в самому оброблювачем подій - це найважливіша інформація, яка не була відсутня у відповіді. Без цього відповідь є неповним і недостатньо допомагає бути вагомим внеском.
Квентін

0
<input type='button' onclick='buttonClick()' />

<script>
function buttonClick(){
    //Validate Here
    document.getElementsByTagName('form')[0].submit();
}
</script>

2
Для корисної відповіді цю реакцію потрібно продовжити. Поясніть, чому це відповідь на запитання.
Jeroen Heier

0

З JQuery ще простіше: працює в Asp.Net MVC і Asp.Core

<script>
    $('#btnSubmit').on('click', function () {

        if (ValidData) {
            return true;   //submit the form
        }
        else {
            return false;  //cancel the submit
        }
    });
</script>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.