2009-04-16 7 views
4

Ich habe einige Probleme mit Microsoft Explorer 6/7 und die jQuery "Klon" -Funktion. Die jQuery, die ich benutze ist:jQuery .Clone() und Microsoft Explorer (Bug?)

$(function() { 
    $('#addFields').click(function() { 
     var newCredit = $('#original').clone(); // create new set 
     newCredit.find('input').val(''); // empty input fields 
     $(this).before(newCredit); // append at the end 
     return false; 
    }); 
}); 

Die HTML-Formular sieht wie folgt aus:

<div id="original"> 

    <li id="prodEnt" > 
     <label class="description" for="entity[]">Entity </label> 
     <div> 
      <input name="entity[]" class="element text medium" type="text" value="" /> 
     </div> 
    </li>  

    <li id="entFunc" > 

    <label class="description" for="element_5">Function </label> 
    <div> 
     <input name="function[]" class="element text medium" type="text" value="" /> 
    </div> 
    </li> 

    <li class="section_break_small"></li> 
</div> 

Der Microsoft-Browser ist nicht in der Lage mehr als einen Klon zu replizieren, und nicht Stil (CSS), um die neuen Elemente.

Bitte beraten Sie mich zu einem IE freundliche Alternative! Vielen Dank.

+0

ich meine Antwort aktualisiert um zu zeigen, wie man nur das erste auswählt, wenn man es in eine Klasse geändert hat. Ich hoffe es hilft. :) –

Antwort

5

Sie können/sollten keine <li> Elemente ohne Eltern haben <ul>. Darüber hinaus können/sollten Sie keine <div> Elemente innerhalb der <li> haben wie Sie haben. Schließlich haben Sie id Attribute in der HTML, die geklont wird, und dies wird zu doppelten Elementen mit der gleichen id führen. Wenn Sie das äußere original div ersetzen und es zu einem <ul> machen, werden Sie die ID-Attribute los und machen Sie stattdessen eine class, es sollte in Ordnung sein.

Alles was gesagt wird, it does work for me on IE7.

EDIT

Als Antwort auf Ihren Kommentar:

Um nur die ersten zu wählen, dies zu tun (vorausgesetzt, es eine Klasse von fields hat):

$('ul.fields').eq(0).clone(); 
+0

Ich habe den Code aktualisiert, und alles funktioniert ordnungsgemäß, aber wenn ich die ul, die zu einer Klasse geklont werden soll, ändern, replizieren sie exponentiell. Ich habe das ul behalten, das als eine ID kloniert wird, und es funktioniert in IE, obwohl es Standards nicht entspricht. Ich bin mir sicher, dass es einen Weg gibt, den replizierten UL als Klasse zu haben und nur einen zu kopieren, aber ich bin mir nicht sicher, wie ich es machen soll. Danke für Ihre Hilfe! – superUntitled

+0

Dank Ihrer Antwort Paolo, habe ich einige divs IDs entfernt, geändert durch Klasse = ... und jetzt funktioniert dieses Klon-Ding im IE. – Enrique