ホームページ ウェブフロントエンド jsチュートリアル zTreeを非同期でロードすると子ノードの追加が常に繰り返される問題の解決方法

zTreeを非同期でロードすると子ノードの追加が常に繰り返される問題の解決方法

Mar 15, 2018 pm 04:20 PM
に追加 ノード

今回は、zTreeが非同期ロードされると子ノードの追加が常に繰り返される問題を解決する方法を紹介します。zTreeが非同期ロードされる場合に子ノードを追加する際に注意すべき点は何ですか? zTreeは、jQueryで実装された多機能な「ツリープラグイン」です。この記事では、jQuery zTree の非同期読み込みで子ノードを追加する際の重複の問題について説明します。必要な方は参考にしてください

zTree の紹介 zTree は多機能な「ツリープラグ」です。 -in」は jQuery によって実装されます。 zTree の最大の利点は、優れたパフォーマンス、柔軟な構成、複数の機能の組み合わせです。

zTree はオープンソースのフリー ソフトウェア (MIT ライセンス) です。 zTree に興味がある場合、または zTree の継続的な開発に資金を提供したい場合は、寄付を行うことができます。

    zTree v3.0は機能ごとにコアコードを分割しており、不要なコードをロードする必要がありません
  • は遅延ロード技術を採用しており、数万のノードを簡単にロードでき、基本的には実現できます。 IE6 でも即時販売
  • IE、FireFox、Chrome、Opera、Safari およびその他のブラウザと互換性があります
  • JSON データをサポートします
  • ノード データの静的および Ajax 非同期読み込みをサポートします
  • スキン変更/カスタムアイコン(CSSに依存)
  • 非常に柔軟なチェックボックスまたはラジオ選択機能をサポート
  • さまざまな
  • イベント

    応答コールバックを提供

  • 柔軟な編集(追加/削除/変更/チェック)関数を使用すると、ノードを自由にドラッグ アンド ドロップでき、複数のノードをドラッグ アンド ドロップすることもできます
  • 1 ページ内で複数の Tree インスタンスを同時に生成できます
  • 柔軟で変更可能な機能を実現する簡単なパラメータ設定

元の質問

//添加结点, 产品和版本
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 });
   });
}
ログイン後にコピー
元々、子ノードを直接追加する場合、親ノードが展開されていない場合、2つの同一の子ノードが追加されます(初回)。後から親ノードが展開されているかどうかを判断しましたが、親ノードが展開されると、(初めて) 2 つの同一の子ノードが追加されます。

方法1

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 });
ログイン後にコピー

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 });
    }
ログイン後にコピー

に変更する 問題は解決できますが、最適化はありますか?変更後はコードカテゴリが多すぎる気がします

一番いい方法そんなに面倒じゃなくても良さそうですよね。 2日前にも同様の質問に回答しました。

1. クリックして子ノードを追加した後、ajax をバックグラウンドに直接送信してデータを保存し、成功イベントをキャプチャします。

2. ajax が成功したら、treeNode.zAsync 属性を使用して親ノードかどうかを確認できます。 false の場合は、reAsyncChildNodes を直接更新します。true の場合は、addN...

この記事のケースを読んだ後は、この方法を習得したと思います。情報については、php 中国語 Web サイトの他の関連記事にご注目ください。 推奨読書:

空白スペースに隠された要素を発見する方法

Ajaxがドロップダウンボックスの非リフレッシュリンクを実装する方法

新規を使用しない詳細な構築

jQueryはドロップを実装する-ダウンメニューナビゲーション

以上がzTreeを非同期でロードすると子ノードの追加が常に繰り返される問題の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Mijia にテレビを追加する方法 Mijia にテレビを追加する方法 Mar 25, 2024 pm 05:00 PM

多くのユーザーは、現代生活において Xiaomi スマート ホーム相互接続の電子エコシステムをますます支持しています。Mijia APP に接続した後、携帯電話で接続されたデバイスを簡単に制御できます。しかし、多くのユーザーはまだ Mijia を追加する方法を知りません。このチュートリアル ガイドでは、困っているすべての人を助けるために、具体的な接続方法と手順を説明します。 1. Mijia APPをダウンロードした後、Xiaomi アカウントを作成またはログインします。 2. 追加方法: 新しいデバイスの電源を入れた後、携帯電話をデバイスに近づけて Xiaomi TV の電源を入れます。通常の状況では、接続プロンプトがポップアップ表示されます。「OK」を選択してデバイスの接続プロセスに入ります。プロンプトが表示されない場合は、スマート ホーム APP に入った後、左下の 1 番目のボタンをクリックしてデバイスを手動で追加することもできます。

win11 で新しいハードドライブを追加するチュートリアル win11 で新しいハードドライブを追加するチュートリアル Jan 05, 2024 am 09:39 AM

コンピュータを購入するとき、必ずしも大容量のハードドライブを選択する必要はありませんが、現時点で、win11 に新しいハードドライブを追加したい場合は、まず購入した新しいハードドライブをインストールしてから、コンピュータにパーティションを追加できます。 win11 で新しいハード ドライブを追加するチュートリアル: 1. まず、ホストを分解し、ハード ドライブのスロットを見つけます。 2. それを見つけたら、まず「データケーブル」を接続しますが、通常はフールプルーフ設計になっており、挿入できない場合は方向を逆にします。 3. 次に、新しいハードドライブをハードドライブスロットに挿入します。 4. 挿入後、データ ケーブルのもう一方の端をコンピュータのマザーボードに接続します。 5. インストールが完了したら、ホストに戻して電源をオンにします。 6. 起動後、「このコンピュータ」を右クリックして「コンピュータの管理」を開きます。 7. 開いたら、左下隅にある「ディスクの管理」をクリックします。 8. 次に、右側で次のことができます。

Win11 でデスクトップ ショートカットをすばやく作成するチュートリアル Win11 でデスクトップ ショートカットをすばやく作成するチュートリアル Dec 27, 2023 pm 04:29 PM

win11ではデスクトップショートカットを追加することでデスクトップ上のソフトやファイルを素早く起動することができ、必要なファイルを右クリックするだけで操作することができます。 win11 でデスクトップ ショートカットを追加する: 1. 「この PC」を開き、デスクトップ ショートカットを追加するファイルまたはソフトウェアを見つけます。 2. 見つけたら、右クリックして選択し、[その他のオプションを表示] をクリックします。 3. 次に、[送信] - [デスクトップ ショートカット] を選択します。 4. 操作が完了すると、デスクトップにショートカットが表示されます。

Tampermonkey で新しいスクリプトを追加する方法 - Tampermonkey でスクリプトを削除する方法 Tampermonkey で新しいスクリプトを追加する方法 - Tampermonkey でスクリプトを削除する方法 Mar 18, 2024 pm 12:10 PM

Tampermonkey Chrome 拡張機能は、スクリプトを通じてユーザー効率とブラウジング エクスペリエンスを向上させるユーザー スクリプト管理プラグインです。では、Tampermonkey はどのようにして新しいスクリプトを追加するのでしょうか?スクリプトを削除するにはどうすればよいですか?エディターに以下の答えを与えてもらいましょう! Tampermonkey に新しいスクリプトを追加する方法: 1. GreasyFork を例に挙げます。GreasyFork Web ページを開いて、従うスクリプトを入力します。ここでは、エディターはワンクリックのオフライン ダウンロードを選択します。 2. スクリプトを選択します。スクリプト ページに入ると、このスクリプトをインストールするボタンが表示されます。 3. クリックしてこのスクリプトをインストールすると、インストール インターフェイスが表示されます。ここをクリックしてインストールしてください。 4. インストール スクリプトでワンクリックでインストールされたことが確認できます。

MetaMask ウォレットで Polygon ネットワークに接続するにはどうすればよいですか? MetaMask ウォレットを Polygon ネットワークに接続するためのチュートリアル ガイド MetaMask ウォレットで Polygon ネットワークに接続するにはどうすればよいですか? MetaMask ウォレットを Polygon ネットワークに接続するためのチュートリアル ガイド Jan 19, 2024 pm 04:36 PM

PolygonMainnet ネットワークの追加方法 Metamask で MATIC (Polygon) を使用するには、「PolygonMainnet」というプライベート ネットワークを追加する必要があります。間違ったネットワーク アドレスで転送すると問題が発生する可能性があるため、$MATIC から転送する前に必ず「PolygonMainnet」ネットワークを使用してください。 Metamask ウォレットはデフォルトで Ethereum メインネットに接続されていますが、単に「PolygonMainnet」を追加して $MATIC を使用することもできます。簡単なコピー&ペーストの手順をいくつか行うだけで完了です。まず、メタマスクウォレットで、右上隅のネットワークオプションをクリックし、「C」を選択します

Vue で画像に透かしを追加するにはどうすればよいですか? Vue で画像に透かしを追加するにはどうすればよいですか? Aug 19, 2023 pm 12:37 PM

Vue で画像に透かしを追加するにはどうすればよいですか? Vue は、Web アプリケーションの構築に広く使用されている人気のある JavaScript フレームワークです。画像の著作権を保護したり、画像の認識性を高めたりするために、Vue アプリケーションで画像に透かしを追加する必要がある場合があります。この記事では、Vue で画像にウォーターマークを追加する方法と、対応するコード例を紹介します。最初のステップは、Vue にウォーターマークを追加するためのサードパーティ ライブラリを導入することです。ウォーターマークを使用することをお勧めします

Outlook がアカウントの追加中にスタックする [修正済み] Outlook がアカウントの追加中にスタックする [修正済み] Mar 23, 2024 pm 12:21 PM

Outlook でアカウントを追加する際に問題が発生した場合は、次の解決策を試して解決できます。通常、これはネットワーク接続の障害、ユーザー プロファイルの破損、またはその他の一時的な問題によって発生する可能性があります。この記事で説明する方法を使用すると、これらの問題を簡単に解決し、Outlook を正常に実行できるようになります。 Outlook がアカウントの追加で停止する Outlook がアカウントの追加で停止する場合は、以下の修正を使用してください。 インターネットを切断して再接続する ウイルス対策ソフトウェアを一時的に無効にする 新しい Outlook プロファイルを作成する セーフ モードでアカウントの追加を試行する IPv6 を無効にする Microsoft サポートと回復アシスタントの修復を実行するOffice アプリケーション Outlook アカウントの追加が必要です

MetaMask の小さなキツネは 2023 年にどのようにして BSC ネットワークを追加するのでしょうか? (2023 年の最新バージョンの MetaMask little fox に BSC ネットワーク チュートリアルが追加されました) MetaMask の小さなキツネは 2023 年にどのようにして BSC ネットワークを追加するのでしょうか? (2023 年の最新バージョンの MetaMask little fox に BSC ネットワーク チュートリアルが追加されました) Jan 19, 2024 pm 05:39 PM

BSCネットワークは、仮想通貨取引所Binanceが開発した高性能ブロックチェーンで、正式な英語名はBinance Smart Chainです。 BSC ブロックチェーンは EVM ネットワークと互換性があるため、MetaMask ウォレットを使用してアクセスおよび対話できます。それでは、Little Fox Wallet はどのようにして BSC ネットワークを追加するのでしょうか?以下のエディターで見てみましょう。 1. MetaMask は BSC ネットワークを直接追加します。まず MetaMask ウォレットを開き、右上隅のアバターをクリックして、[設定] - [ネットワーク] をクリックし、[ネットワークの追加] ボタンをクリックして、Little Fox ウォレットのネットワーク設定ページに入ります。最新バージョンMetamask には、通貨スマート チェーンを含む一般的なブロックチェーン ネットワークが組み込まれています。 BNBSmartChaを注文するだけです

See all articles