2010-12-06 15 views
10

प्रस्तुत करने मैं .submit उपयोग कर रहा हूँ, लेकिन इसके बजाय अपने संलग्न प्रकार्य के निष्पादन का, यह पृष्ठ ताज़ा है।jQuery form.submit()() का पता लगाने के ताज़ा पेज के बजाय

मैं http://chris-armstrong.com/familytree पर पारिवारिक पेड़ आरेखों (नेस्टेड सूचियों का उपयोग करके) खींचने के लिए एक उपकरण बना रहा हूं।

एक वंश जोड़ने के लिए, आप नियंत्रण चालू करते हैं, और यह प्रत्येक <ul> (या पीढ़ी) में <li class="add_member">+</li> जोड़ता है।

आप एक <li class="add_member">+</li> तत्व पर क्लिक करते हैं, यह एक <form class="add_member> एक <input> से मिलकर और एक <submit> बटन के साथ + बदल देता है। जब सबमिट बटन क्लिक किया गया है तो पता लगाने के लिए मैंने $("form.add_member").submit() का उपयोग किया है, और यह होना चाहिए और फिर <input> की सामग्री के साथ फ़ॉर्म को प्रतिस्थापित करें, हालांकि इस बिंदु पर यह पृष्ठ को रीफ्रेश करता है (और यूआरएल में जोड़ता है)।

कोई विचार क्या मैं गलत कर रहा हूं? मैंने नीचे पूरा कार्य संलग्न किया है।

function addAddListeners() { 
      $('li.add_member').click(function(){ 

      //create input form 
      $(this).html("<form class='add_member'><input id='fn_' placeholder='Name' required autofocus /><button type='submit'>Add</button></form>") 

      //listen for input form submission 
      $("form.add_member").submit(function(){ 

      //if input form isn't blank, create new li element with content of form, else go back to the add_member li 
      if($('form.add_member').val()) { 
         $(this).replaceWith('<li><span class="vcard" title="Click to edit this members details"><span class="edit fn">'+$('input#fn_').val()+'</span></span><ul><li class="add_member">+</li></ul></li><li class="add_member">+</li>'); 
         addEditListeners(); 
         addAddListeners(); 
        } else { 
         alert("no change"); 
        $(this).html("+"); 
        } 
       }); 

      }); 
     } 

संपादित करें: वापसी झूठी जोड़ रहा है; पेज रीफ्रेशिंग को रोकता है, लेकिन .submit() से जुड़ा हुआ फ़ंक्शन फायरिंग प्रतीत नहीं होता है, किसी भी विचार क्यों?

+1

retrun झूठी जोड़ने अंत में फार्म की ... प्रस्तुत समारोह /// – kobe

+0

मैं पहले एक टिप्पणी के रूप में इस सवाल का जवाब कहा, मैं बदल जाएगा यह जवाब देने के लिए/ – kobe

+0

@gov माफ करना, हर किसी ने एक ही समय में जवाब दिया, इसलिए मैं उस व्यक्ति के साथ गया जिसने सबसे अधिक जानकारी दी (इस बारे में सोचकर कि भविष्य में प्रश्न देखने वाले लोगों के लिए सबसे उपयोगी क्या होगा)। हालांकि आपकी मदद के लिए धन्यवाद, मान लीजिए कि आपको दूसरी समस्या के बारे में कोई जानकारी नहीं है? –

उत्तर

17
  1. डिफ़ॉल्ट फ़ॉर्म कार्रवाई होने से रोकने के लिए आपको सबमिट फ़ंक्शन से return false; या event.preventDefault(); की आवश्यकता है।
  2. आप प्रतिनिधिमंडल के साथ jQuery on पर गौर करें ताकि आप घटनाओं rebind करने के लिए जब नए तत्व डोम में जुड़ जाते हैं की जरूरत नहीं है चाहिए।
+0

धन्यवाद, पुनः बाध्यकारी समस्याएं पैदा कर रहा था! निश्चित रूप से उसमें देखेंगे। –

+0

हे भगवान 3 साल के लिए मैं और मेरे unbinding घटनाओं के सभी rebinding किया गया है, जब भी मैं अपने डोम के लिए एक नया तत्व जोड़। मुझे विश्वास नहीं है कि मैंने प्रतिनिधि के बारे में कभी नहीं पाया ._। –

+0

@ डार्कएस्लिन: jQuery 1.7 के रूप में इसे करने का तरीका 'ऑन' फ़ंक्शन है। –

2

मुझे लगता है कि आपको .submit() के अंत में return false; की आवश्यकता है।

+0

यह सबमिट फ़ंक्शन के भीतर है, या उसके बाद सीधे है? –

3

एक वापसी जोड़ें: false; अपने प्रस्तुत कार्य करने के लिए:

$("form.add_member").submit(function(){ 

      //if input form isn't blank, create new li element with content of form, else go back to the add_member li 
      if($('form.add_member').val()) { 
         $(this).replaceWith('<li><span class="vcard" title="Click to edit this members details"><span class="edit fn">'+$('input#fn_').val()+'</span></span><ul><li class="add_member">+</li></ul></li><li class="add_member">+</li>'); 
         addEditListeners(); 
         addAddListeners(); 
        } else { 
         alert("no change"); 
        $(this).html("+"); 
        } 
       }); 
      return false; 
      }); 
+0

धन्यवाद, कि ताज़ा बंद कर दिया है, लेकिन समारोह .submit से जुड़ी() बंद फायरिंग हो प्रतीत नहीं होता है ... किसी भी विचार क्यों? –

+0

मैं $ ('form.add_member') को सतर्क करता हूं।वैल() और यकीन है कि यह कुछ वैध लौटा रहा है बनाते हैं। हो सकता है कि लाइन बदलने के लिए अगर ($ ('form.add_member')। वैल() == '... वास्तविक तत्व मूल्य ...') – wajiw

+0

मैं वास्तव में एक चेतावनी .submit के बाद सही बैठे मिल गया है (समारोह () {और इसे बंद फायरिंग नहीं है। बहुत अजीब ... –

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