Hello,
Je suis en train de créer une interface admin contenant des champs qui devront pouvoir être triés. Pour ceci j'utilise jQuery UI sortable.
Le problème c'est qu'il est possible d'ajouter des champs à ceux déjà existants au chargement de la page, et malgré l'utilisation de sortable('refresh'), les nouveaux champs ne deviennent pas "sortables".
Une idée ? Voici mon code :
Modifié par Skoua (12 Aug 2009 - 12:45)
Je suis en train de créer une interface admin contenant des champs qui devront pouvoir être triés. Pour ceci j'utilise jQuery UI sortable.
Le problème c'est qu'il est possible d'ajouter des champs à ceux déjà existants au chargement de la page, et malgré l'utilisation de sortable('refresh'), les nouveaux champs ne deviennent pas "sortables".
Une idée ? Voici mon code :
$(function(){
var num = $("#hotelform input[type='text']").length - 1;
var rooms = '';
// ajout de chambres
$('#add').click(function(){
num++;
$(this).before('<p><label for="room_' + num + '">Chambre #' + (num + 1) + '</label><br/><input type="text" name="room_' + num + '" id="room_' + num + '" /> <a href="#" class="removeRoom">X</a></p>');
$("#hotelform input[type='text']:last").focus();
$('#sortable').sortable('refresh');
return false;
});
$('#hotelform').submit(function(){
$(this).find("input[type='text']").each(function(){
rooms += $(this).val() + ',';
});
rooms = rooms.slice(0, rooms.length - 1);
$('#rooms').val(rooms);
});
// tri des chambres
$('#sortable').sortable({
update: function(e, ui){
sortRooms();
},
axis: 'y'
});
// suppression des chambres
$('.removeRoom').live('click', function(){
$(this).parent().remove();
sortRooms();
num = $("#hotelform input[type='text']").length - 1;
});
function sortRooms(){
$('#sortable').sortable('refresh');
$("#sortable input[type='text']").each(function(i){
$(this).attr({'name': 'room_' + i, 'id': 'room_' + i});
$(this).prev().prev().attr('for', 'room_' + i).text('Chambre #' + (i + 1));
});
}
});
Modifié par Skoua (12 Aug 2009 - 12:45)