2011-05-09 20 views
6

¿Cómo escribiría un oyente para un evento de doble clic en un objeto jstree? (Por ejemplo, me gustaría hacer doble clic en un nodo de árbol y pegar el valor de href de su ancla en un campo input en un formulario en algún lugar).¿Cómo escuchar para hacer doble clic en jstree?

+0

duplicado posible de [Cómo ¿Puedo adjuntar un comportamiento personalizado con un doble clic en jsTree?] (http://stackoverflow.com/questions/3674625/how-can-i-attach-custom-behaviour-to-a-double-click-in-jstree) –

Respuesta

8

He usado algo así hace un año atrás, no me pongo sé si hay algún cambio en la versión actual jstree:

jstree.bind("dblclick.jstree", function (event) { 
    var node = $(event.target).closest("li"); 
    var data = node.data("jstree"); 
    // Do some action 
}); 

nodo: Contiene el li que se ha hecho clic.

data: Contiene los metadatos.

+2

Después de '// Hacer algo de acción', si agrego' alert (data); 'entonces obtengo' null'. –

+0

Esta respuesta SO está cerca de la suya y parece funcionar: http://stackoverflow.com/questions/3674625/how-can-i-attach-custom-behaviour-to-a-double-click-in-jstree/5652753 # 5652753 –

+4

node.data ("jstree") regresa indefinido en la versión más reciente de jStree (3.1.x) Así que usa esto: 'var tree = $ (this) .jstree(); \t \t \t var node = tree.get_node (evt.target); \t \t \t var nodePath = tree.get_path (node) .join ("/"); ' Así que tiene el objeto nodo y el objeto tree para invocar cualquier árbol API – TechMaze

4

La solución de Nirmal funciona si haces clic en cualquier parte del jstree div. Quería habilitar el doble clic solo en los nodos y no, por ejemplo, en el espacio en blanco a la derecha. cambiando la solución un poco habilitar esto:

$('#jstree-div a').live('dblclick',function (e) { 
    var node = $(e.target).closest("li"); 
    var type = node.attr('rel'); 
    var item = node[0].id; 

    // do stuff... 
}); 

No sé por qué la 'rel' y los atributos 'id' están en diferentes lugares en el nodo resultante, pero funciona;)

Cuestiones relacionadas