2011-12-13 5 views
1

J'ai ce code, mais quand je clone un élément, l'action est aussi clonée. Ce que je veux seulement des actions individuelles pour chaque element.You peuvent voir le problème dans la démostop propagation jquery

<script type="text/javascript"> 
$(document).ready(function() { 
    $('.edit').editable('http://save.php', { 
     indicator : 'Saving...', 
     submit : 'OK', 
     cancel : 'Cancelar', 
    }); 
}); 


$(document).ready(function() { 
    $('#btnAdd').live('click', function(){ 
     var num = $('.clonedInput').length; 
     var newNum = new Number(num + 1); 

     var newElem = $('#input' + num).clone(true).prop('id', 'input' + newNum); 

     newElem.children(':text').prop('name', "myformdata[job][]").prop('job', 'job').val(''); 

     $('#input' + num).after(newElem); 
     $('#btnDel').prop('disabled', ''); 

     if (newNum == 4) $('#btnAdd').prop('disabled', 'disabled'); 

    }); 

    $('#btnDel').live('click', function(){ 
     var num = $('.clonedInput').length; 

     $('#input' + num).remove(); 
     $('#btnAdd').prop('disabled', ''); 

     if (num - 1 == 1) $('#btnDel').prop('disabled', 'disabled'); 

    }); 

    $('#btnDel').prop('disabled', 'disabled'); 

}); 
</script> 

    <div class="clonedInput" id="input1"> 
     <span style="float: left;">job</span> 
     <div class="edit" id="job="myformdata[job][]">Job</div> 
    </div> 

    <div id="copy"> 
     <input class="format" type="button" id="btnAdd" value="Ad" /> 
     <input class="format" type="button" id="btnDel" value="Re" /> 
    </div> 

demo

+0

Utilisez les délégués non actifs. Live n'a pas été la méthode préférée depuis longtemps maintenant. –

Répondre

0

RightSaid est correcte, il suffit d'utiliser .clone() w/o tous les paramètres et il ne sera pas cloner les gestionnaires/données.

En ce qui concerne votre code, je pense que c'est ce que vous allez pour: http://jsbin.com/unebex/11/

Vous devez définir les nouveaux éléments à « modifiables » comme vous les créez. Il n'est pas nécessaire d'utiliser .live() sur ces boutons car vous ne créez pas de nouvelles instances de ces boutons.

1

Si vous ne voulez pas cloner des données et des gestionnaires, utilisez .clone() au lieu de .clone(true).

Si vous voulez que l'élément cloné individuel soit appliqué, appliquez-le après avoir cloné l'élément.

...clone().editable('http://save.php', { 
      indicator : 'Saving...', 
      tooltip : 'Click to edit...', 
      submit : 'OK', 
      cancel : 'Cancelar' 
     }); 
+0

J'ai déjà fait beaucoup d'expériences avec clone, mais aucun d'entre eux ne fonctionne correctement pour les éléments clonés. – user947462

+0

Quelqu'un veut-il expliquer le vote à la baisse? – RightSaidFred