有人能解释这一行javascript吗?
我正在使用DynaTree JavaScript树,并一直在修改它。具体地说,我试图根据节点的类型添加多个上下文菜单 基本上,我的想法是让上下文菜单向我的MVC(2)控制器发出一个ajax请求,并将此信息作为JSON传递,在JSON中它将用于创建一个可以在c#中访问的类 我在这里浏览了大约500篇文章之后,这篇文章还不错!现在我需要再次修改JS,以便根据类型选择适当的上下文菜单 我的清单看起来像有人能解释这一行javascript吗?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在使用DynaTree JavaScript树,并一直在修改它。具体地说,我试图根据节点的类型添加多个上下文菜单 基本上,我的想法是让上下文菜单向我的MVC(2)控制器发出一个ajax请求,并将此信息作为JSON传递,在JSON中它将用于创建一个可以在c#中访问的类 我在这里浏览了大约500篇文章之后,这篇文章还不错!现在我需要再次修改JS,以便根据类型选择适当的上下文菜单 我的清单看起来像 <div id="tree"> <ul> <li
<div id="tree">
<ul>
<li id="'ID':1,'TYPE':1" title="Look: a tool tip!">item1 with key and tooltip</li>
<li id="'ID':2,'TYPE':2" class="activate">item2: activated on init</li>
<li id="'ID':3,'TYPE':3" class="folder">Folder with some children
<ul>
<li id="'ID':4,'TYPE':1">Sub-item 3.1</li>
<li id="'ID':5,'TYPE':1">Sub-item 3.2</li>
</ul>
</li>
<li id="'ID':6,'TYPE':1" class="expanded">Document with some children (expanded on init)
<ul>
<li id="'ID':7,'TYPE':1'">Sub-item 4.1</li>
<li id="'ID':8,'TYPE':1'">Sub-item 4.2</li>
</ul>
</li>
<li id="'ID':9,'TYPE':1" class="lazy folder">Lazy folder</li>
</ul>
</div>
此行-$(span).contextMenu({menu:“myMenu1”},函数(action,el,pos){
似乎既可以设置上下文菜单,也可以在单击上下文菜单时触发。如果有人能为谷歌提供一些关键字,我会很高兴,因为我不知道
提前感谢
。contextMenu
看起来像一个插件,但是如果不知道它是哪个插件,就很难给出明确的答案。不过,初始化该插件似乎需要两个参数:
对象
——这对于插件来说是相当标准的旁白:我不是100%清楚您打算在这里做什么,但您似乎在说,每次用户单击其中一个树项时,您都要执行AJAX调用以获取该项的上下文菜单?除非您确实需要使每个项的上下文菜单不同,否则我会嵌入上下文菜单的代码在页面中添加u,并用一些粘合javascript显示它;否则用户每次尝试执行普通UI操作时都会被困在等待服务器上——打开上下文菜单;更不用说服务器上的负载了。嗨,bloopletech,对不起,我不清楚。上下文菜单包含在三个列表中,用html硬编码。ajax part会在后台做与上下文相关的数据库类型的事情,即删除上下文点击会去删除一些东西。但基本上我的问题是:$(span).contextMenu({menu:“myMenu1”},function(action,el,pos){关键字函数出现时没有给出函数名。据我所知,这是不可能的,这是什么?我搜索它的目的是什么?哦,这是一个
匿名函数
;您正在声明函数,然后将函数作为contextMenu函数的参数传递。再次感谢,这将是一个真正的帮助。谢谢Jamie、 我被dyna tree迷住了,我忘了它使用了另一个插件。我现在来看看。出于兴趣,有人说这可能是一个javascript闭包,这值得谷歌一试,还是方向不对。@DavidBattersby这不是闭包,但你可能想谷歌这个阶段,因为这是一个有用的知识;)你所看到的(没有名字的函数)是一个匿名函数
。下面是一个关于javascript函数(和闭包)的详细答案:非常感谢-当我回到这里时,实际上我正在阅读这个链接。
function bindContextMenu(span) {
// Add context menu to this node:
debugger;
$(span).contextMenu({ menu: "myMenu1" }, function (action, el, pos) {
var node = $.ui.dynatree.getNode(el).toString();
node = node.replace(/'/g, '\"');
node = jQuery.parseJSON('{' + node + '}');
$.ajax({
type: "POST",
url: "/TreeView/Click/",
data: { ID: node.ID, TYPE: node.TYPE },
error: function (request) { $("#message").html("error"); },
success: function (result) { $("#message").html("Success - " + result); }
})
});
};