2011-11-01 22 views
30

मेरे पास अंत में एक जोड़ें बटन वाला एक टेबल है। जब आप इस बटन पर क्लिक करते हैं तो मैं वर्तमान में नीचे एक नई टेबल पंक्ति बनना चाहता हूं। मैं यह भी चाहता हूं कि इस पंक्ति पर इनपुट फ़ील्ड रिक्त हों। मैं .clone() का उपयोग करके ऐसा करने की कोशिश कर रहा हूं लेकिन यह पृष्ठ पर सभी पंक्तियों को क्लोन करता है। कृपया मदद करे। धन्यवादjQuery क्लोन टेबल पंक्ति

स्क्रिप्ट

$("input.tr_clone_add") 
     .live('click', function(){ 
       $(this).closest('.tr_clone') 
        .clone() 
        .insertAfter(".tr_clone") 
     }); 

एचटीएमएल

<table width="100%" border="0" cellspacing="0" cellpadding="0" id="table-data"> 
<tr> 
<td>Name</td> 
<td>Location</td> 
<td>From</td> 
<td>To</td> 
<td>Add</td> 
</tr> 
<tr class="tr_clone"> 
<td><input type="text" autofocus placeholder="who" name="who" ></td> 
<td><input type="text" autofocus placeholder="location" name="location" ></td> 
<td><input type="text" placeholder="Start Date" name="datepicker_start" class="datepicker"></td> 
<td><input type="text" placeholder="End Date" name="datepicker_end" class="datepicker"></td> 
<td><input type="button" name="add" value="Add" class="tr_clone_add"></td> 
</tr> 
</table><!-- /table#table-data --> 
+0

followinng के रूप में है मुझे लगता है कि आप भी चाहते हैं 'name' पैरामीटर आदेश डेटा विरोधों को दूर करने के लिए अद्यतन किया जाना (यानी मूल्यों नई पंक्ति को अधिलेखित करने में प्रवेश किया क्लोन पंक्ति के मूल्य) ...? – Tomm

+0

हाय टॉम, मुझे नहीं लगता था कि नाम मूल्य संघर्ष करेंगे, मुझे किसी बिंदु पर एक विभेदक जोड़ना होगा हालांकि शायद टीआर कक्षा में कोई संख्या जोड़नी है? –

+2

मैं आमतौर पर क्लोन के लिए "टेम्पलेट" का उपयोग करता हूं, जिसे सीएसएस के माध्यम से "डिस्प्ले: none" के लिए स्टाइल किया जाता है। – hafichuk

उत्तर

51

आपकी समस्या यह है कि आपके insertAfter:

.insertAfter(".tr_clone") 

हर .tr_clone के बाद आवेषण:

तत्वों के मिलान किए गए सेट को इस पैरामीटर द्वारा निर्दिष्ट तत्व (नों) के बाद डाला जाएगा।

शायद आप डुप्लिकेट कर रहे पंक्ति पर after का उपयोग करना चाहते हैं। और थोड़ा .find(':text').val('') क्लोन टेक्स्ट इनपुट साफ़ करेगा; कुछ इस तरह:

var $tr = $(this).closest('.tr_clone'); 
var $clone = $tr.clone(); 
$clone.find(':text').val(''); 
$tr.after($clone); 

डेमो: http://jsfiddle.net/ambiguous/LAECx/

मुझे यकीन है कि जो इनपुट ध्यान देने के साथ खत्म हो जाना चाहिए ताकि मुझे लगता है कि अकेले छोड़ दिया है नहीं कर रहा हूँ।

+0

वे $ बदसूरत आदत हैं। – mzvarik

+1

@mzvarik क्यों? एक अग्रणी '$' एक आम अनुस्मारक है कि आपके पास केवल सादे तत्वों की बजाय jQuery में लिपटे तत्व हैं। उन्हें हर जगह इस्तेमाल करना क्योंकि PHP में आपकी उंगलियों को लगता है कि यह एक बुरी आदत होगी लेकिन यह मामला यहां नहीं है। –

13

ये रहा:

$(table).delegate('.tr_clone_add', 'click', function() { 
    var thisRow = $(this).closest('tr')[0]; 
    $(thisRow).clone().insertAfter(thisRow).find('input:text').val(''); 
}); 

लाइव डेमो:http://jsfiddle.net/RhjxK/4/


अद्यतन: jQuery में घटनाओं सौंपने का नया तरीका है

$(table).on('click', '.tr_clone_add', function() { … }); 
+0

'.closest ('tr)' के बाद' [0] 'का कारण क्या है और, पहेली में, 'table = $ (' # table-data ') [0]'? क्यों नहीं 'var thisow = $ (this) .closest (' tr '); '? (सहायक उदाहरण, बीटीडब्ल्यू, +1) – gibberish

+0

@gibberish एक jQuery ऑब्जेक्ट पर '[0]' लागू करने से उस jQuery ऑब्जेक्ट के अंदर पहला DOM तत्व लौटाता है। यह पैटर्न मेरी पुरानी आदत है - मैं सीधे चर के अंदर डीओएम ऑब्जेक्ट्स के संदर्भों को संग्रहीत करना चाहता हूं। आप इसे इस मामले में छोड़ सकते हैं क्योंकि हम 'thisRow' चर को एक नए' $() 'में पारित कर रहे हैं, जो परवाह नहीं करता है अगर उसे डोम ऑब्जेक्ट्स या jQuery ऑब्जेक्ट्स युक्त DOM ऑब्जेक्ट प्राप्त होते हैं। –

+0

बहुत उपयोगी, धन्यवाद शिम। मैं हमेशा आपके उत्तरों के लिए देखता हूं। वे अच्छी तरह लिखे, चालाक और शिक्षित हैं। साथ ही, [webPlatformDaily] की बढ़ती सफलता पर बधाई (http://webplatformdaily.org/)। मैं देखता हूं कि सर्वश्रेष्ठ अंतर्दृष्टि द्वारा आपकी अंतर्दृष्टि लेखन की सराहना की जाती है। अच्छी तरह से लायक; बहुत बढ़िया। – gibberish

4

इस प्रयास करें v ariation:

$(".tr_clone_add").live('click', CloneRow); 

function CloneRow() 
{ 
    $(this).closest('.tr_clone').clone().insertAfter(".tr_clone:last"); 
} 
4

कोड नीचे अंतिम पंक्ति क्लोन और तालिका में अंतिम पंक्ति के बाद जोड़ देगा:

var $tableBody = $('#tbl').find("tbody"), 
$trLast = $tableBody.find("tr:last"), 
$trNew = $trLast.clone(); 

$trLast.after($trNew); 

कार्य उदाहरण: http://jsfiddle.net/kQpfE/2/

1

इस प्रयास करें।

एचटीएमएल

<!-- Your table --> 
<table width="100%" border="0" cellspacing="0" cellpadding="0" id="table-data"> 
    <thead> 
     <tr> 
      <th>Name</th> 
      <th>Location</th> 
      <th>From</th> 
      <th>To</th> 
      <th>Add</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td><input type="text" autofocus placeholder="who" name="who" ></td> 
      <td><input type="text" autofocus placeholder="location" name="location" ></td> 
      <td><input type="text" placeholder="Start Date" name="datepicker_start" class="datepicker"></td> 
      <td><input type="text" placeholder="End Date" name="datepicker_end" class="datepicker"></td> 
      <td><input type="button" name="add" value="Add" class="tr_clone_add"></td> 
     </tr> 
    <tbody> 
</table> 

<!-- Model of new row --> 
<table id="new-row-model" style="display: none"> 
    <tbody> 
     <tr> 
      <td><input type="text" autofocus placeholder="who" name="who" ></td> 
      <td><input type="text" autofocus placeholder="location" name="location" ></td> 
      <td><input type="text" placeholder="Start Date" name="datepicker_start" class="datepicker"></td> 
      <td><input type="text" placeholder="End Date" name="datepicker_end" class="datepicker"></td> 
      <td><input type="button" name="add" value="Add" class="tr_clone_add"></td> 
     </tr> 
    <tbody> 
</table> 

स्क्रिप्ट

$("input.tr_clone_add").live('click', function(){ 
    var new_row = $("#new-row-model tbody").clone(); 
    $("#table-data tbody").append(new_row.html()); 
}); 
0

इस कोड का प्रयास करें, मैं क्लोनिंग और क्लोन तत्व को दूर करने के लिए निम्न कोड का इस्तेमाल किया, मैं भी नया वर्ग का इस्तेमाल किया है (newClass) जिसे स्वचालित रूप से टी के साथ जोड़ा जा सकता है वह हाल में एचटीएमएल

क्लोनिंग के लिए क्लोन ..

$(".tr_clone_add").live('click', function() { 
    var $tr = $(this).closest('.tr_clone'); 
    var newClass='newClass'; 
    var $clone = $tr.clone().addClass(newClass); 
    $clone.find(':text').val(''); 
    $tr.after($clone); 
}); 

क्लोन तत्व को हटाने के लिए।

$(".tr_clone_remove").live('click', function() { //Once remove button is clicked 
    $(".newClass:last").remove(); //Remove field html 
    x--; //Decrement field counter 
}); 

एचटीएमएल

<tr class="tr_clone"> 
         <!-- <td>1</td>--> 
         <td><input type="text" class="span12"></td> 
         <td><input type="text" class="span12"></td> 
         <td><input type="text" class="span12"></td> 
         <td><input type="text" class="span12"></td> 
         <td><input type="text" class="span10" readonly> 
         <span><a href="javascript:void(0);" class="tr_clone_add" title="Add field"><span><i class="icon-plus-sign"></i></span></a> <a href="javascript:void(0);" class="tr_clone_remove" title="Remove field"><span style="color: #D63939;"><i class="icon-remove-sign"></i></span></a> </span> </td> </tr> 
संबंधित मुद्दे