2009-04-16 7 views
4

J'ai quelques problèmes avec Microsoft Explorer 6/7 et la fonction jQuery "clone". Le jQuery que j'utilise est:jQuery .clone() et 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; 
    }); 
}); 

Le formulaire HTML ressemble à ceci:

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

Le navigateur Microsoft ne peut pas répliquer plus d'un clone, et n'a pas de style (CSS), le nouveau éléments.

S'il vous plaît me conseiller à une alternative amicale IE! Merci.

+0

Je mis à jour ma réponse pour montrer comment sélectionner seulement le premier si vous l'avez changé en classe. J'espère que cela aide. :) –

Répondre

5

Vous ne pouvez/ne devez pas avoir d'éléments <li> sans parent <ul>. De plus, vous ne pouvez/ne devez pas avoir d'éléments <div> à l'intérieur du <li> comme vous l'avez fait. Enfin, vous avez des attributs id dans le code HTML qui est en cours de clonage, ce qui se traduira par des éléments en double avec le même id. Si vous remplacez le div original externe et en faire un <ul>, se débarrasser des attributs id et en faire un class à la place, ça devrait aller. Tout cela étant dit it does work for me on IE7.

EDIT

En réponse à votre commentaire:

Pour ne sélectionner la première, le faire (en supposant qu'il a une classe de fields):

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

J'ai mis à jour le code, et tout fonctionne correctement, cependant, quand je change le ul qui doit être cloné à une classe, ils se répliquent exponentiellement. J'ai gardé le ul qui est cloné comme un id, et cela fonctionne dans IE, même si ce n'est pas conforme aux normes. Je suis sûr qu'il y a un moyen d'avoir la réplication d'UL en tant que classe, et seulement un clone, mais je ne suis pas sûr de savoir comment le faire. Merci de votre aide! – superUntitled

+0

Merci à votre réponse Paolo, j'ai enlevé les ID de certains div, changé par class = ... et maintenant ce truc de clonage fonctionne bien dans IE. – Enrique