Bagaimana cara membatalkan pengiriman formulir di acara onclick tombol kirim?

99

Saya sedang mengerjakan aplikasi web ASP.net.

Saya memiliki formulir dengan tombol kirim. Kode untuk tombol kirim terlihat seperti ini <input type='submit' value='submit request' onclick='btnClick();'>.

Saya ingin menulis sesuatu seperti berikut:

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

Bagaimana saya melakukan ini?

Sungai Vivian
sumber
Aduh, ini bikin kepalaku sakit. Saya memiliki beberapa submitmasukan berbeda . Saya rasa saya akan mencoba menggunakan kontrol sisi server di halaman ini.
Sungai Vivian
2
kemungkinan duplikat dari Bagaimana mencegah formulir dikirimkan?
TJ

Jawaban:

183

Anda lebih baik melakukan ...

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

Jika isValidForm()kembalifalse , maka formulir Anda tidak terkirim.

Anda juga mungkin harus memindahkan pengendali acara Anda dari sebaris.

document.getElementById('my-form').onsubmit = function() {
    return isValidForm();
};
alex
sumber
Bagus, tapi sepertinya saya tidak bisa mulai onsubmitbekerja setiap kali saya menggunakan ASP.net karena asp.net membungkus SEMUANYA dalam bentuknya sendiri ...
Vivian River
5
Anda dapat menggunakan saran keduanya. Javascript sebaris memang jahat.
Stephen
3
Jika Anda menggunakan formulir web ASP.NET (petunjuk: jangan) maka jangan mencoba menyertakan formulir lain. Mereka sama sekali tidak kompatibel. Saya mendengar ASP.NET MVC memungkinkan Anda membangun aplikasi web menggunakan markup idiomatik.
Quentin
@ David, jika menggunakan formulir lain tidak kompatibel dengan formulir web ASP.net, haruskah saya hanya menggunakan kontrol sisi server?
Sungai Vivian
2
Orang lain telah menjawab PERSIS seperti Anda stackoverflow.com/a/23604664/1639385 . Saya pikir itu terlalu kebetulan.
Ulysses Alves
43

Ubah masukan Anda menjadi ini:

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

Dan kembalikan false dalam fungsi Anda

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

Anda perlu berubah

onclick='btnClick();'

untuk

onclick='return btnClick();'

dan

cancelFormSubmission();

untuk

return false;

Yang mengatakan, saya akan mencoba untuk menghindari atribut acara intrinsik yang mendukung JS yang tidak mengganggu dengan perpustakaan (seperti YUI atau jQuery) yang memiliki API penanganan acara yang baik dan terkait dengan acara yang benar-benar penting (yaitu acara pengiriman formulir sebagai gantinya dari acara klik tombol).

Quentin
sumber
2
Menggunakan onclick akan memungkinkan pengguna untuk menekan enter dan melewati pemeriksaan.
Cfreak
7

Terkadang onsubmittidak berfungsi dengan asp.net.

Saya menyelesaikannya dengan cara yang sangat mudah.

jika kita memiliki bentuk seperti itu

<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>

Anda sekarang dapat menangkap acara itu sebelum formulir postback dan menghentikannya dari postback dan melakukan semua ajax yang Anda inginkan menggunakan jquery ini.

$(document).ready(function () {
            $("#login-btn").click(function (event) {
                event.preventDefault();
                alert("do what ever you want");
            });
 });
Shady Sherif
sumber
5

Anda harus mengubah tipe dari submitmenjadi button:

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

dari pada

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

Anda kemudian mendapatkan nama tombol Anda dalam javascript dan mengaitkan tindakan apa pun yang Anda inginkan

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

bekerja untuk saya semoga membantu.

Muhammad
sumber
4

Anda perlu return false;:

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

function btnClick() {
    return validData();
}
SLaks
sumber
1

Mengapa tidak mengubah tombol kirim menjadi tombol biasa, dan pada acara klik, kirimkan formulir Anda jika lolos tes validasi?

misalnya

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

function btnClick() { 
    if (validData()) 
        document.myform.submit();
} 
George Johnston
sumber
1
Menekan enter akan melewati pemeriksaan. Gunakan onSubmit
Cfreak
Maka itu tidak akan berfungsi sama sekali jika JavaScript tidak tersedia. <a href=" icant.co.uk/articles/pragmatic-progressive-enhancement/… pada hal-hal yang berhasil</i>.
Quentin
1

Anda membutuhkan onSubmit. Bukan onClicksebaliknya, seseorang dapat menekan enter dan itu akan melewati validasi Anda. Adapun pembatalan. Anda harus mengembalikan false. Berikut kodenya:

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

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

Edit onSubmit termasuk dalam tag formulir.

Cfreak
sumber
ini tidak akan berhasil. jika data valid, Anda tidak mengembalikan true. menempatkan kembali benar; di akhir fungsi btnClick ()
NickSoft
1

Sederhana saja, kembalikan false;

Kode di bawah ini masuk dalam satu klik tombol kirim menggunakan jquery ..

if(conditionsNotmet)
{
return false;
}
omar-ali
sumber
0

menggunakan onclick='return btnClick();'

dan

function btnClick() {
    return validData();
}
Adam
sumber
2
menekan enter akan melewati pemeriksaan. Gunakan onSubmit
Cfreak
0
function btnClick() {
    return validData();
}
mbeckish
sumber
1
Perlu melakukan lebih dari ini untuk membuatnya berhasil. Saya sudah mencoba membuat functino kembali benar atau salah dan sepertinya tidak ada bedanya.
Sungai Vivian
1
Jawabannya benar. Suara positif. Anda harus mengembalikannya juga di tag input
Cfreak
1
Juga, saya lebih suka menggunakan ev.preventDefault()atau ev.returnValue = falsemembatalkan perilaku default tetapi tidak mencegah peristiwa menggelegak, jika kontrol lain mengamati peristiwa yang sama pada elemen yang sama. Gunakan return falsehanya jika Anda ingin menghentikan acara menggelembung dan membatalkan tindakan default. Lihat artikel ini .
Klemen Slavič
Harus mengembalikannya ke event handler itu sendiri adalah bagian informasi utama yang hilang dari jawabannya. Tanpa itu, jawabannya tidak lengkap dan tidak cukup membantu untuk mendapat dukungan.
Quentin
0
<input type='button' onclick='buttonClick()' />

<script>
function buttonClick(){
    //Validate Here
    document.getElementsByTagName('form')[0].submit();
}
</script>
Orang
sumber
2
Untuk jawaban yang bermanfaat, reaksi ini perlu diperpanjang. Jelaskan mengapa ini merupakan jawaban atas pertanyaan tersebut.
Jeroen Heier
0

Dengan JQuery bahkan lebih sederhana: bekerja di Asp.Net MVC dan Asp.Core

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

        if (ValidData) {
            return true;   //submit the form
        }
        else {
            return false;  //cancel the submit
        }
    });
</script>
Tidoy007
sumber