2009-04-02 13 views
8

मैं जानना चाहता हूं कि onsubmit ईवेंट को किसी फॉर्म से कुछ फॉर्म सत्यापन करने के लिए कैसे पकड़ना है, क्योंकि मेरे पास सीधे इसका उपयोग नहीं है। (मैं टिप्पणियों के लिए एक वर्डप्रेस प्लगइन लिख रहा हूं, इसलिए फॉर्म टैग या सबमिट बटन तक सीधे पहुंच नहीं है।)किसी फ़ॉर्म के लिए सबमिट करने की घटना को कैसे पकड़ें?

मुझे अपनी प्लगइन के लिए ऐसा करने की कोशिश करने में इतनी निराशा हुई कि मैंने एक हैलो वर्ल्ड संस्करण लिखा है नीचे। जब मैं पृष्ठ लोड करता हूं, और सबमिट बटन पर क्लिक करते समय "फॉर्म सबमिट" अलर्ट चाहता हूं, तो मैं इसे 'हैलो वर्ल्ड' अलर्ट दिखाना चाहता हूं। इसके बजाए, पृष्ठ लोड होने पर यह पॉप अप दोनों दिखाता है।

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

उत्तर

12

बदलें इस:

formCheck.onSubmit = doMapping() 

यह करने के लिए:

formCheck.onSubmit = doMapping 

आप एक समारोह के अंत में कोष्ठक जोड़ते हैं आपको लगता है कि समारोह को अंजाम

यहाँ मेरी कोड है । जब आप कोई फ़ंक्शन असाइन करते हैं (या इसे किसी अन्य फ़ंक्शन पर पैरामीटर के रूप में पास करते हैं) तो आपको कोष्ठक को छोड़ना होगा क्योंकि जावास्क्रिप्ट में फ़ंक्शन पॉइंटर पुनर्प्राप्त करने का तरीका है।


संपादित करें: आप भी इस तरह ऑनसबमिट घटना के लिए कि समारोह का काम ऊपर doMapping समारोह की घोषणा स्थानांतरित करने के लिए की आवश्यकता होगी (अच्छा पकड़ tvanfosson!):

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

formCheck.onSubmit = doMapping(); 

हालांकि यदि doMapping फ़ंक्शन का उपयोग कहीं और नहीं किया जाता है तो आप doMapping फ़ंक्शन को अज्ञात फ़ंक्शन के रूप में घोषित कर सकते हैं:

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

जो मेरे लिए थोड़ा क्लीनर लगता है।

+0

मुझे लगता है कि आपको ऑर्डर बदलना होगा क्योंकि डूमैपिंग को इसे सबमिट करने से पहले परिभाषित करने की आवश्यकता हो सकती है। – tvanfosson

+0

धन्यवाद - मैंने आपके उत्तर को संबोधित करने के लिए अपना जवाब संपादित किया। –

8

jQuery का उपयोग करना।

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

धन्यवाद! असल में मैंने एंड्रयू के सुझाव और खिड़की दोनों का उपयोग करके इसे एक और तरीका हल किया। मुझे लगता है कि समस्या आंशिक रूप से थी क्योंकि तत्व वास्तव में लोड नहीं हुआ था।

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

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

नोट ने सोचा कि पूरा पृष्ठ लोड होने के बाद अधिभार ईवेंट निकाल दिया गया है। तो ऐसी छवि होनी चाहिए जो लोड करने में अधिक समय लगे - आमतौर पर Google एनालिटिक्स जैसे कुछ उपयोगकर्ता ईवेंट हिटलर को उपयोगकर्ता हिट सबमिट करने से पहले नहीं माना जाएगा। – Rashack

+0

jQuery उत्तर हैडल करता है कि ... – Rashack

संबंधित मुद्दे

 संबंधित मुद्दे