Estoy tratando de escribir un helper función de jQueryUI para establecer un atributo de un elemento que se arrastra desde una ‘arrastrarse’ lista ‘ordenar’ la lista. (La razón por la que necesita para hacer esto es que la última versión de jQueryUI elimina el atributo ‘id’ de objetos caídos)

Sin embargo, el atributo no es lo que es la ‘ordenar’ la lista. Estoy haciendo algo mal en la función auxiliar?

$("#draggable > li").draggable({
  connectToSortable: "#sortable",
  helper: function (event) {
    var id = $(this).attr('id');
    var ret = $(this).clone();
    ret.attr('dragId', id);
    console.log('dragId: ', ret.attr('dragId'));
    return ret();
  }
});

$( "#sortable" ).sortable({
    start: function( event, ui ) {
          console.log( "sortable start: dragId=", ui.item.attr( "dragId" ) );
    },
    stop: function( event, ui ) {
          console.log( "sortable stop: dragId=", ui.item.attr( "dragId" ) );
    }
});

Cuando me arrastre un elemento de la posibilidad de arrastrar la lista a la que se puede ordenar la lista, se imprime en la consola:

dragId: itemA
sortable start: dragId= undefined
sortable stop: dragId= undefined

Yo esperaría a imprimir:

dragId: itemA
sortable start: dragId= itemA
sortable stop: dragId= itemA

Aquí es el ejemplo completo (con HTML) en JsBin

Si que es cierto que «la versión más reciente de jQueryUI elimina el atributo ‘id’ de objetos caídos», a continuación, guardar el id de apagar y volver a aplicar en el cuadro de controlador de eventos de su lanzables (tendrás que añadir un drop).
guárdelo donde??
Variable Global, un niño de la li, cualquier número de lugares.

OriginalEl autor JoelFan | 2011-07-19

2 Comentarios

  1. 5

    Poner la dragId atributo en el ayudante elemento, por lo que debe utilizar ui.helper en lugar de ui.item:

    console.log("sortable start: dragId=", ui.helper.attr("dragId"));

    EDICIÓN: Nicola Peluchetti es derecho en su comentario a continuación: ui.helper de hecho se null durante el stop evento. Puesto que usted probablemente desee utilizar la dragId atributo durante ese evento, una solución sería copiar el atributo durante el start evento, cuando ambos ui.helper y ui.item están disponibles:

    $("#sortable").sortable({
        start: function(event, ui) {
              ui.item.attr("dragId", ui.helper.attr("dragId"));
              console.log("sortable start: dragId=", ui.item.attr("dragId"));
        },
        stop: function(event, ui) {
              console.log("sortable stop: dragId=", ui.item.attr("dragId"));
        }
    });
    Eso es cierto sólo para la función de arranque (no la deje de uno)
    quiere decir que la auxiliar no tiene un dragId atributo durante el stop evento?
    No lo he comprobado con firebug y de hecho la interfaz de usuario.ayudante es nulo en la función de parada

    OriginalEl autor Frédéric Hamidi

  2. 1

    La única manera de mantener el id que he encontrado es la adición de un drop y este código:

        $( "#sortable" ).droppable({
            drop: function( event, ui ) {
                $(ui.draggable).attr('id', $(ui.helper).attr('id'));
            }
        });

    Hay un violín aquí (y que debe haber una mejor manera de hacer esto) http://jsfiddle.net/MdZwB/1/

    OriginalEl autor Nicola Peluchetti

Dejar respuesta

Please enter your comment!
Please enter your name here