jsTree 上下文菜单问题

发布于 2024-11-11 17:12:53 字数 1177 浏览 5 评论 0原文

这应该是一个非常简单的问题,但我似乎无法在任何地方找到答案。我最近(就像今天一样)开始使用 jsTree,并且刚刚设置了我的第一棵树。我创建了一个仅包含静态文本的无序列表:

<ul>
  <li>one</li>
  <li>two</li>
  <li>three</li>
</ul>

我执行 jsTree 的代码如下所示:

$(document).ready(function () {
        $("#demo1").bind("select_node.jstree",
                function(event, data) {
                    //DO SOMETHING WHEN A NODE IS CLICKED
                }).jstree();
});

然后我尝试添加上下文菜单。使用以下内容:

$(document).ready(function () {
        $("#demo1").bind("select_node.jstree",
                function(event, data) {
                    //DO SOMETHING WHEN A NODE IS CLICKED
                }).jstree({plugins: ["contextmenu"], contextmenu: {items: customMenu}});
    });

customMenu 是一个返回对象的简单函数。

当我执行第一个代码时,我得到了 jsTree 并且它折叠并展开。当我执行第二个时,jsTree 所在的区域显示“正在加载...”,仅此而已。如果我右键单击该单词,我就会看到菜单。

有什么建议吗?

如果,当我将其指向函数 customMenu 时,我添加 (),那么我会得到一个非常奇怪的菜单,其中包含: -创造 -重命名 -删除 -编辑 - 切 - 复制 - 粘贴 --添加组 --删除

我不确定我知道发生了什么。我将函数名称更改为不同的名称,以确保我没有获得 jQuery 或 jsTree 函数,但我仍然遇到奇怪的行为。有什么建议吗?

This should be a really simple question, but I can't seem to find the answer anywhere. I've recently (like today) began using jsTree and I just got my first tree set up. I created an unordered list of just static text:

<ul>
  <li>one</li>
  <li>two</li>
  <li>three</li>
</ul>

My code to do a jsTree looks like this:

$(document).ready(function () {
        $("#demo1").bind("select_node.jstree",
                function(event, data) {
                    //DO SOMETHING WHEN A NODE IS CLICKED
                }).jstree();
});

Then I try to add a context menu. Using the following:

$(document).ready(function () {
        $("#demo1").bind("select_node.jstree",
                function(event, data) {
                    //DO SOMETHING WHEN A NODE IS CLICKED
                }).jstree({plugins: ["contextmenu"], contextmenu: {items: customMenu}});
    });

customMenu is a simple function that returns an object.

When I execute the first code, I get my jsTree and it collapses and expands. When I execute the second one, the area where the jsTree is says "Loading..." and that is all. If I right-click that word, I DO get the menu.

Any suggestions?

if, when I point it to the function customMenu, I add the (), then I get a really strange menu that has:
-create
-rename
-delete
-edit
--cut
--copy
--paste
--Add Group
--delete

I'm not sure I know what's going on. I changed the function name to something different to be sure I wasn't getting a jQuery or jsTree function, but I still get the strange behavior. Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

热风软妹 2024-11-18 17:12:53

建议不要自己处理上下文菜单的创建,而是让 jstree 为您做这件事。

因此,在初始化代码中,您可以编写:

$("#demo1").jstree(
{ 
    "plugins" : [ "contextmenu" ]
}

这足以拥有一个功能性上下文菜单。

it would be suggested not to handle the contextmenu creation yourself, but rather let jstree do that for you.

so in the initialization code you would write:

$("#demo1").jstree(
{ 
    "plugins" : [ "contextmenu" ]
}

and that would be sufficient to have a functional contextmenu.

数理化全能战士 2024-11-18 17:12:53

不要将 on select 方法绑定到 jstree。相反,创建新的菜单项,如下面的代码所示。
这应该可以正常工作。

$("#demo1").jstree(
{ 
     "contextmenu":{
         items:{
              "LogicalNameForMenuItem":{
                     label: "DisplayNameForMenuItem",
                     action: function (node) {
                          <--Your code to handle the function goes here-->
                     } 
               }
          }
      },

      "plugins" : [ "contextmenu","crrm","ui" ]

});

这应该有效。

如果您想删除默认菜单项,请将它们设置为 false

"contextmenu":{
         items:{
            create:false,
            remove:false,
            ccp:false
         }
}

dont bind the on select method to jstree. Instead create your new menu items as in the code below.
This should work fine.

$("#demo1").jstree(
{ 
     "contextmenu":{
         items:{
              "LogicalNameForMenuItem":{
                     label: "DisplayNameForMenuItem",
                     action: function (node) {
                          <--Your code to handle the function goes here-->
                     } 
               }
          }
      },

      "plugins" : [ "contextmenu","crrm","ui" ]

});

This should work.

And if you want to remove the default menu items then set them to false

"contextmenu":{
         items:{
            create:false,
            remove:false,
            ccp:false
         }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文