2009-04-02 15 views
8

onsubmit olayının form doğrulamasını yapmak için bir formdan nasıl kapılacağını bilmek istiyorum, çünkü doğrudan erişim hakkım yok. (Yorumlar için bir Wordpress eklentisi yazıyorum, bu yüzden form etiketine veya gönderme düğmesine doğrudan erişiminiz yok.)Bir form için onSubmit olayı nasıl alınır?

Merhaba Dünya versiyonunu yazdığım eklenti için bunu yapmaya çalışırken çok sinirlendim altında. Sayfayı yüklediğimde 'Merhaba Dünya' uyarısını ve gönder düğmesini tıkladığımda "gönderilen" uyarıyı göstermesini istiyorum. Bunun yerine, sayfa yüklendiğinde hem pop up'ları gösterir.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
    <html> 
    <head> 
    <title>Hello World</title> 
    </head> 
    <body> 
    <h2>Test</h2> 
    <form action="#" method="post" id="commentform"> 

    <p><input type="text" name="author" id="author" size="22" tabindex="1" /> 
    <label for="author"><small>Name (required)</small></label></p> 

    <p><input name="submit" type="submit" id="submit" tabindex="5" value="Submit Comment" /> 

    </form> 

    <script type="text/JavaScript"> 
    <!-- 
    alert("Hello world"); 

    var formCheck = document.getElementById("commentform"); 

    formCheck.onSubmit = doMapping(); 

    function doMapping() { 
     alert("form submitted"); 
     return false; 
    } 

    --> 
    </script>  

    </body> 
    </html> 

cevap

12

Değişim bu:

formCheck.onSubmit = doMapping() 

Buna: Bir fonksiyonun sonuna parantez eklediğinizde

formCheck.onSubmit = doMapping 

bu işlemi yürütmek İşte

benim kodudur . Bir işlev atadığınızda (veya başka bir işleve bir parametre olarak ilettiğinizde), parantezini atlamanız gerekir, çünkü bu, JavaScript'te bir işlev işaretçisini almanın yolu.


Düzenleme: Ayrıca böyle onsubmit olaya bu işlevin atama yukarıda doMapping fonksiyonun beyanı taşımak gerekir (iyi yakalamak tvanfosson!): Ancak

function doMapping() { 
     alert("form submitted"); 
     return false; 
    } 

formCheck.onSubmit = doMapping(); 

doMapping işlevi başka bir yerde kullanılmıyorsa, doMapping işlevini aşağıdaki gibi anonim bir işlev olarak bildirebilirsiniz:

formCheck.onSubmit = function() { 
     alert("form submitted"); 
     return false; 
    } 

bana göre biraz daha temiz görünüyor.

+0

Sana da onSubmit işleyici olarak atamak önce doMapping tanımlanabilir gerekebilir çünkü sırasını değiştirmek gerekecek düşünüyorum. – tvanfosson

+0

Teşekkürler - Sizin cevabınızı ele almak için cevabımı düzenledim. –

8

jQuery'yi kullanma.

$(document).ready(function() { 
    $('#commentform').submit(function() { 
     alert('form submitted'); 
     return false; 
    }); 
}); 
0

Teşekkür ederiz! Aslında hem Andrew'in önerisini hem de window.onload olayını kullanarak başka bir şekilde çözdüm. Sorunun kısmen de, parçanın aslında yüklenmediğinden kaynaklandığını düşünüyorum.

window.onload = function(){ 
    if (document.getElementById("commentform")){ 
     document.getElementById("commentform").onsubmit = doMapping; 
    } 
} 

function doMapping(){ 
      alert("form submitted"); 
      return false; 
} 
+0

Not, tüm sayfanın yüklenmesinden sonra yükleme olayının tetiklendiğini unutmayın. Bu yüzden uzun sürecek bir resim olmalı - genellikle google analytics gibi bir şey. Etkinlik işleyiciniz, kullanıcı gönderilmeden önce yorumlanmayacaktır. – Rashack

+0

jQuery yanıtı işleniyor ... – Rashack

İlgili konular