2010-11-23 13 views
6

मैं गतिशील रूपों को जोड़/निकालना चाहता हूं। मैं उन फॉर्मों का उपयोग कर रहा हूं जो एक टेबल में संग्रहीत हैं, प्रत्येक पंक्ति में फॉर्म है। मेरे पास 2 टेबल हैं: - एक को प्रदर्शित किया जा रहा है - जो उस अस्थायी पंक्ति से घिरा हुआ है जिसे मैं क्लोन करना चाहता हूं और प्रदर्शित तालिका में डालना चाहता हूं।jQuery क्लोन() फ़ायरफ़ॉक्स बग - एक क्लोन फॉर्म सबमिट नहीं कर सकता

सब कुछ आईई में ठीक काम करता है लेकिन फ़ायरफ़ॉक्स में इसके रूप के साथ क्लोन पंक्ति सबमिट नहीं की जा सकती है। अगर मैं पंक्ति को क्लोन नहीं करता हूं लेकिन बस इसे सम्मिलित करता हूं, तो मैं फॉर्म जमा कर सकता हूं लेकिन मुझे उस पंक्ति को दोबारा डालने के लिए पुन: उपयोग करने में सक्षम होना चाहिए, इसलिए मुझे क्लोनिंग का उपयोग करने की आवश्यकता है। क्लोनिंग के साथ और बिना उत्पन्न एचटीएमएल कोड फ़ायरबग में समान दिखता है। मैं कैसे इस समस्या को दूर कर सकते हैं?

कोड क्लोनिंग और डालने पंक्ति के लिए इस्तेमाल किया: $('#tempRow').clone().insertAfter($('#templatesTable tr:last'));

+0

आपका मार्कअप कैसा दिखता है? –

उत्तर

6

आप मज़बूती से एक आईडी विशेषता के साथ कुछ क्लोन नहीं कर सकते हैं और यह डोम में फिर से डालें। यह एक अवैध HTML दस्तावेज़ बनाता है, क्योंकि आपके पास एक ही आईडी वाले दो तत्व हैं। फ़ायरफ़ॉक्स ठीक से व्यवहार कर रहा है।

आपको क्या करने की आवश्यकता होगी फॉर्म को क्लोन करें और फिर सभी आईडी को अद्वितीय (फॉर्म और उसके सभी इनपुट और बाल तत्व) में बदलें। फिर आप फॉर्म जमा करने में सक्षम होंगे।

ऐसा लगता है कि आप tr तत्व क्लोन कर रहे हैं और इसे एक तालिका में डाल रहे हैं? tr तत्व एक आईडी के साथ केवल एक है, तो यह काम करेगा:

$('#tempRow') 
    .clone() 
    .attr('id', 'tempRow-new') 
    .insertAfter($('#templatesTable tr:last')); 

याद रखें, हालांकि, कि अगर ऐसा फ़ॉर्म तत्व – या इसके किसी भी div, frameset, input, आदि – है सहित बच्चों, है एक आईडी, आपको या तो उस आईडी को हटाने या इसे बदलने की आवश्यकता होगी। अन्यथा आपके पास अभी भी एक अवैध दस्तावेज़ होगा, और अभी भी समस्याएं हो सकती हैं।

इसके अतिरिक्त

ऊपर कोड स्निपेट पुन: प्रयोज्य नहीं है। जैसे ही आप फॉर्म को दूसरी बार क्लोन करने का प्रयास करते हैं, आपके पास आईडी tempRow-new आईडी के साथ दो तत्व होंगे। यदि आपको पंक्ति को कई बार क्लोन करने की आवश्यकता है, तो आपको यह सुनिश्चित करने के लिए कुछ क्लोन किए गए तत्व अद्वितीय हैं, कुछ प्रकार की वृद्धि संख्या या यूयूआईडी जोड़ना होगा।

+0

हां, ऐसा लगता है कि फ़ायरफ़ॉक्स में समस्या हल हो रही है। हालांकि मुझे आईई में एक त्रुटि है जब: var cloned = $ ('# tempRow')। क्लोन()। Attr ("id", "tr" + trLastId); $ ('फॉर्म', क्लोन) .attr ("आईडी", "फॉर्म" + trLastId); अंतिम पंक्ति त्रुटि देता है 'ऑब्जेक्ट इस संपत्ति या विधि का समर्थन नहीं करता है'। मैं jquery 1.3.2 का उपयोग कर रहा हूँ। – qba

+0

जो अजीब है ... आपका कोड ठीक दिखता है। फायरबग में, क्या आप यह कर सकते हैं: 'console.debug ($ ('फॉर्म', क्लोन)। लम्बाई);' – Stephen

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