Maison > Article > interface Web > Comment résoudre le problème selon lequel l'ajout de nœuds enfants est toujours répété lorsque zTree est chargé de manière asynchrone
Cette fois, je vais vous montrer comment résoudre le problème selon lequel l'ajout de nœuds enfants est toujours répété lorsque zTree est chargé de manière asynchrone. Quels sont les problèmes ? précautions ? Voici des cas pratiques.
zTree est un "plug-in d'arbre" multifonctionnel implémenté par jQuery. A travers cet article, je partagerai avec vous le problème de duplication du chargement asynchrone de jQuery zTree pour ajouter des nœuds enfants. Les amis qui en ont besoin peuvent s'y référer
Introduction à zTree
zTree est un "plug-in d'arbre" multifonctionnel implémenté avec jQuery. D'excellentes performances, une configuration flexible et une combinaison de plusieurs fonctions sont les plus grands avantages de zTree. zTree est un logiciel open source et gratuit (licence MIT). Si vous êtes intéressé par zTree ou si vous souhaitez financer le développement continu de zTree, vous pouvez faire un don..
événements rappels de réponse
Question originale
//添加结点, 产品和版本 function addNode(event) { rMenu.css({ "visibility": "hidden" }); var treeNode = zTree.getSelectedNodes()[0]; var pid; var nodeName; var treelevel; if (!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) { //添加产品结点 pid = 0; treeNode = null; treelevel = 1; } else if (treeNode) { //添加版本结点 pid = treeNode.id; treelevel = 2; } $.post( "AddNode.action", { type: treelevel, id: pid }, function(nodeIdAndName) { var params = /([^\|]+)\|([^\|]+)/.exec(nodeIdAndName); if (!((!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) || treeNode.open)) { zTree.expandNode(treeNode, true); } treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel }); }); }Lorsque j'ai initialement ajouté directement des nœuds enfants, si le nœud parent n'était pas développé, deux nœuds enfants identiques seraient ajoutés (le première fois); plus tard, j'ai vérifié si le nœud parent L'expansion a été jugée, mais il s'est avéré que si le nœud parent est développé, deux nœuds enfants identiques seront ajoutés (pour la première fois).
Méthode 1
Remplacerif (!((!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) || treeNode.open)) { zTree.expandNode(treeNode, true); } treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });par
if(!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) { treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel }); } else if(treeNode.open) { if(treeNode.isParent) { zTree.reAsyncChildNodes(treeNode, "refresh"); } else { treeNode.isParent=true; zTree.reAsyncChildNodes(treeNode, "refresh"); } } else { zTree.expandNode(treeNode, true); treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel }); }question Résolue, mais a-t-il été optimisé ? J'ai l'impression qu'il y a trop de catégories de codes après le changement
La meilleure façon
Ça n'a pas l'air si gênant, n'est-ce pas ? J'ai répondu à une question similaire il y a deux jours. 1. Après avoir cliqué pour ajouter un nœud enfant, envoyez directement ajax en arrière-plan pour enregistrer les données et capturer l'événement de réussite 2 Lorsque ajax réussit, vous pouvez utiliser treeNode.zAsync. attribut pour savoir si le nœud parent est Un chargement asynchrone a été effectué. S'il est faux, alors directement reAsyncChildNodes est actualisé. Si c'est vrai, alors utilisez addN...if ((!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) || treeNode.zAsync) treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel }); else zTree.reAsyncChildNodes(treeNode, "refresh");
Je pense que vous avez lu le cas dans cet article. Après avoir maîtrisé la méthode, veuillez prêter attention aux autres articles connexes sur le site Web php chinois pour un contenu plus passionnant !
Lecture recommandée :
Comment découvrir des éléments cachés dans l'espace videComment réaliser une liaison sans actualisation de listes déroulantes avec AjaxExplication détaillée de l'absence de nouvelle constructionimplémentation jQuery de la navigation par menu déroulantCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!