Ok j'ajouter cela comme une autre réponse, car la boîte de commentaires est petit,
Pour masquer/afficher un élément pendant que vous pouvez utiliser en faisant glisser le démarrage et l'arrêt des événements.
Cet exemple affiche/cache l'icône +/- (réduire/dézoomer) à côté du texte de TODODE tout en le faisant glisser mais vous pouvez facilement le modifier pour masquer/afficher les cases si elles sont présentes.
<script type="text/javascript">
$(function() {
$(".treeNode").draggable({
start: function (event, ui) {
var previousTd = $(this).parent().prev() ;
$("img", previousTd).css("visibility", "hidden");
},
stop: function (event, ui) {
var previousTd = $(this).parent().prev();
$("img", previousTd).css("visibility", "visible");
});
$("#<%= TreeView1.ClientID%>").droppable({
drop: function (event, ui) {
alert(ui.draggable.text());
}
});
});
Je vais essayer de jeter un oeil sur le problème du clone.
- modifier -
Apparemment, le problème clone est que dans IE et est causée par le
<NodeStyle CssClass="treeNode" />
En collaboration avec
$(".treeNode").draggable(...
Cela met la La classe treeNode non seulement sur la balise "a" mais aussi sur la balise "td" environnante. Donc, en utilisant le sélecteur .treeNode, la méthode draggable est exécutée deux fois ... Ce n'est pas le cas dans FF.
Vous pouvez résoudre ce problème en changeant simplement le sélecteur dans "# <% = TreeView1.ClientID%> a.treeNode" Donc, avec l'aspx mentionné ci-dessus, vous obtiendrez le script suivant.
$(function() {
$("#<%= TreeView1.ClientID%> a.treeNode").draggable({
appendTo: 'body',
helper: 'clone',
start: function (event, ui) {
var previousTd = $(this).parent().prev();
$("img", previousTd).css("visibility", "hidden");
},
stop: function (event, ui) {
var previousTd = $(this).parent().prev();
$("img", previousTd).css("visibility", "visible");
},
zIndex: '100'
});
$("#<%= TreeView1.ClientID%>").droppable({
drop: function (event, ui) {
alert(ui.draggable.text());
}
});
});
</script>
- modifier -
En réponse à votre commentaire:
Pour obtenir la valeur du nœud traîné vous pouvez utiliser javascript manipulation de chaîne pour filtrer hors du Attribut href (treenode rend la valeur dans l'attribut href).
Votre javascript dans la fonction drop pourrait ressembler à ceci. (Encore besoin de faire quelques vérifications pour les valeurs nulles ofcourse)
var hrefParts = $(ui.draggable.context.href.split("\\"));
var nodeValue = hrefParts[hrefParts.length - 1];
nodeValue = nodeValue.substring(0, nodeValue.length - 2);
alert(nodeValue);
Ou vous pouvez le faire un peu clientside nettoyant en héritant treeNode et envelopper chaque treeNode par un div avec un attribut personnalisé dans lequel vous mettez votre clientside id.
Votre treenode personnalisé pourrait ressembler à ceci
public class WrappedTreeNode : TreeNode
{
public string ClientValue { get; set; }
protected override void RenderPreText(HtmlTextWriter writer)
{
writer.WriteBeginTag("div");
//you can simply use the base.Value aswell here if you want them to be the same
writer.WriteAttribute("id", ClientValue);
base.RenderPreText(writer);
}
protected override void RenderPostText(HtmlTextWriter writer)
{
base.RenderPostText(writer);
writer.WriteEndTag("div");
}
}
Ensuite, dans l'utilisation de ASPX (vous inscrire ensemble de commande Web personnalisée premier)
<ServerControls:WrappedTreeNode Text="Bradley" ClientValue="ID-1221"/>
au lieu de
<asp:TreeNode Text="Bradley" Value="ID-1221"/>
Et votre javascript reste agréable et propre
alert($(ui.draggable).parent().attr("id"));
Comment vais-je récupérer la valeur du noeud déplacé? –
Merci Steffan ..... Enfin j'ai eu ce que je voulais ..... Texte et valeur. –
Encore une chose Steffan! Je veux faire glisser uniquement les nœuds enfants. Je n'ai pas à faire glisser les nœuds parents. Alors, comment vais-je faire glisser uniquement les nœuds enfants? Que dois-je faire dans le jquery ci-dessus à draggable? –