Gönder düğmesi onclick etkinliğinde form gönderimini nasıl iptal ederim?


99

Bir ASP.net web uygulaması üzerinde çalışıyorum.

Gönder düğmesi olan bir formum var. Gönder düğmesinin kodu gibi görünüyor <input type='submit' value='submit request' onclick='btnClick();'>.

Aşağıdakine benzer bir şey yazmak istiyorum:

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

Bunu nasıl yaparım?


ah, bu başımı ağrıtıyor. Birkaç farklı girdim var submit. Sanırım bu sayfada sunucu tarafı kontrollerini kullanmayı deneyeceğim.
Vivian Nehri

Yanıtlar:


184

Yapman daha iyi ...

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

Eğer isValidForm()iadeler false, sonra formu göndermek değildir.

Ayrıca muhtemelen olay işleyicinizi satır içi konumundan taşımalısınız.

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

Güzel, ama görünüşe göre onsubmitASP.net'i her kullandığımda işe başlayamıyorum çünkü asp.net HER ŞEYİ kendi biçiminde
sarmalıyor

6
Onun ikinci önerisini kullanabilirsiniz. Satır içi javascript zaten şeytandır.
Stephen

3
ASP.NET web formlarını kullanıyorsanız (ipucu: yapma) diğer formları eklemeye çalışmayın. Bunlar basitçe uyumsuzdur. ASP.NET MVC'nin deyimsel biçimlendirme kullanarak web uygulamaları oluşturmanıza izin verdiğini duydum.
Quentin

@David, diğer formları kullanmak ASP.net web formlarıyla uyumsuzsa, yalnızca sunucu tarafı denetimleri kullanmalı mıyım?
Vivian Nehri

2
Başka biri tam olarak sizin gibi stackoverflow.com/a/23604664/1639385 yanıt verdi . Çok fazla tesadüf olduğunu düşünüyorum.
Ulysses Alves

43

Girişinizi şuna değiştirin:

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

Ve işlevinde yanlış döndür

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

13

Değişmen gerek

onclick='btnClick();'

-e

onclick='return btnClick();'

ve

cancelFormSubmission();

-e

return false;

Bununla birlikte, iyi bir olay işleme API'sine sahip olan ve gerçekten önemli olan olaya (yani bunun yerine formun gönderme olayına) bağlanan bir kitaplıkla (YUI veya jQuery gibi) göze batmayan JS lehine iç olay özniteliklerinden kaçınmaya çalışırım. düğmenin tıklama olayının).


2
Onclick kullanmak, kullanıcının enter tuşuna basmasına ve kontrolü atlamasına olanak tanır.
Cfreak

7

Bazen onsubmitasp.net ile çalışmazdı.

Çok kolay bir şekilde çözdüm.

eğer böyle bir formumuz varsa

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

Artık bu olayı geri göndermeden önce yakalayabilir ve geri göndermeden durdurabilir ve bu jquery'yi kullanarak istediğiniz tüm ajax'ı yapabilirsiniz.

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

5

türü olarak submitdeğiştirmelisiniz button:

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

onun yerine

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

daha sonra javascript'te düğmenizin adını alır ve istediğiniz eylemi ona ilişkilendirirsiniz

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

benim için çalıştı umarım yardımcı olur.


4

Yapmanız gerekenler return false;:

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

function btnClick() {
    return validData();
}

1

Neden gönder düğmesini normal bir düğme olarak değiştirmiyorsunuz ve tıklama olayında, doğrulama testlerinizi geçerse formunuzu göndermiyorsunuz?

Örneğin

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

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

1
Girişe basmak, kontrolü atlayacaktır.
OnSubmit'i

O zaman JavaScript yoksa hiç çalışmayacaktır. <a href=" icant.co.uk/articles/pragmatic-progressive-enhancement/… işe yarayan şeyler hakkında</a>.
Quentin

1

İhtiyacın var onSubmit. Değil onClickaksi birisi sadece basın girebilir ve sizin doğrulama atlayacaktır. İptal etme gelince. false döndürmeniz gerekiyor. İşte kod:

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

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

Edit onSubmit, form etiketine aittir.


bu işe yaramaz. veri geçerliyse, true değerini döndürmezsiniz. geri dönüş doğru; btnClick () işlevinin sonunda
NickSoft

1

Çok basit, sadece yanlış döndürün;

Aşağıdaki kod, jquery kullanılarak gönder düğmesine tıklandığında girilir ..

if(conditionsNotmet)
{
return false;
}

0

kullanım onclick='return btnClick();'

ve

function btnClick() {
    return validData();
}

2
enter tuşuna basmak kontrolü atlayacaktır.
OnSubmit'i

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

1
Çalışması için bundan daha fazlasını yapmak gerekiyor. Functino'yu doğru veya yanlış döndürmeyi denedim ve herhangi bir fark yaratmıyor gibi görünüyor.
Vivian Nehri

1
Cevabı doğru. Olumlu oy verildi. Onu giriş etiketine de iade
etmelisiniz

1
Ayrıca, varsayılan davranışı kullanmayı ev.preventDefault()veya ev.returnValue = falseiptal etmeyi tercih ederim, ancak diğer kontrollerin aynı olay üzerinde aynı olayı gözlemlemesi durumunda olay köpürmesini önlememeyi tercih ederim . Kullanım return falseköpüren gelen olayı durdurmak istediğinizde sadece ve varsayılan işlemi iptal edin. Bkz bu yazıyı .
Klemen Slavič

Cevapta eksik olan en önemli bilgi, olay işleyicide geri döndürülmesidir. Bu olmadan, cevap eksiktir ve olumlu oy vermeye değecek kadar yardımcı olmaz.
Quentin

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

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

2
Faydalı bir cevap için bu reaksiyonun uzatılması gerekiyor. Bunun neden sorunun cevabı olduğunu açıklayın.
Jeroen Heier

0

JQuery ile daha da basit: Asp.Net MVC ve Asp.Core'da çalışır

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

        if (ValidData) {
            return true;   //submit the form
        }
        else {
            return false;  //cancel the submit
        }
    });
</script>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.