Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从上下文菜单中右键单击项目的id或详细信息?_Javascript_Jquery_Angularjs - Fatal编程技术网

Javascript 如何从上下文菜单中右键单击项目的id或详细信息?

Javascript 如何从上下文菜单中右键单击项目的id或详细信息?,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我用AngularJS填充了一个表。在表中的链接按钮上单击鼠标右键,我想显示我使用Jquery创建的特定上下文菜单。很好。我可以在右键单击时看到上下文菜单。但是,如果我单击上下文菜单中的任何选项(如Delete),我希望获得所单击项目的Id。它应该作为参数传递,以便我可以处理该函数。我总是得到未定义的Id 请帮助我如何在上下文菜单中右键单击项目的Id //上下文菜单功能 var$contextMenu=$contextMenu; $body.oncontextmenu,table tbody按

我用AngularJS填充了一个表。在表中的链接按钮上单击鼠标右键,我想显示我使用Jquery创建的特定上下文菜单。很好。我可以在右键单击时看到上下文菜单。但是,如果我单击上下文菜单中的任何选项(如Delete),我希望获得所单击项目的Id。它应该作为参数传递,以便我可以处理该函数。我总是得到未定义的Id

请帮助我如何在上下文菜单中右键单击项目的Id

//上下文菜单功能 var$contextMenu=$contextMenu; $body.oncontextmenu,table tbody按钮,Function E{ $contextMenu.css{ 显示:块, 左:e.pageX, 顶部:e.pageY }; 返回false; }; $contextMenu.onclick,a,函数{ $contextMenu.hide; }; $html.clickfunction{ $contextMenu.hide; }; $scope.nodes=[{ 身份证号码:228, 名称:文件夹1, 描述:, 路径:227/, 嗯:是的 }, { 身份证号码:229, 名称:文件夹2, 描述:, 路径:227/, 嗯:是的 } ]; //在上下文菜单上调用Delete函数 $scope.deleteFolder=functiondetailid{ console.logJSON.stringifydetailid; //如果我发送的是detail而不是detail.id,则返回的是完整的json。 }; 上下文菜单{ 位置:固定; 显示:无; } .contextmenustyle{ 显示:块; 位置:静态; 边缘底部:5px; } 名称 成员 {{detail.name} - 删去 您可以将此id作为数据属性包含到按钮中:

<button ng-click="openFolder(detail.id, detail.name)" data-id="{{detail.id}}">

要获取单击的对象,需要对绑定函数进行一些更改

HTML:


已在绑定函数中传递事件。您可以在单击功能中获得单击的对象。

为了简单地解决问题,我们可以为每个细节对象创建上下文菜单

您的主要问题是上下文菜单div在您的 ng重复循环,因此无法在那里获取detail.id

我已经把它放在了你的循环中,并将上下文菜单id改为class,所有的东西都像你的代码一样工作。只需忽略其他特定于角度的代码,如ng控制器、ng应用程序,它们仅用于此演示工作。当我以这种方式显示上下文菜单时,您可以看到

$(this).parent().find('.contextMenu').css({
  display: "block",
  left: e.pageX,
  top: e.pageY
});
我也发了一封信

var-app=angular.module'myApp',[]; 应用程序控制器'myCtrl',函数$scope{ $body.oncontextmenu,table tbody按钮,Function E{ $.contextMenu.hide; $this.parent.find'.contextMenu'.css{ 显示:块, 左:e.pageX, 顶部:e.pageY }; 返回false; }; $.contextMenu.onclick,一个函数{ $this.hide; }; $html.clickfunction{ $.contextMenu.hide; }; $scope.nodes=[{ 身份证号码:228, 名称:文件夹1, 描述:, 路径:227/, 嗯:是的 }, { 身份证号码:229, 名称:文件夹2, 描述:, 路径:227/, 嗯:是的 } ]; $scope.deleteFolder=functiondetailid{ console.logdetailid; }; }; .上下文菜单{ 位置:固定; 显示:无; } .contextmenustyle{ 显示:块; 位置:静态; 边缘底部:5px; } 名称 成员 {{detail.name} 删去 -
您的代码段似乎不起作用。请在上下文菜单中传递事件:$contextMenu.onclick,a,function{}我尝试过。它将返回除Id以外的所有垃圾。{originalEvent:{isTrusted:true},类型:contextmenu,目标:{jQuery311069559266060260442:{$binding:[detail.name]},jQuery311069559266060260441:{events:{click:[{type:click,origType:click,guid:127,namespace:}}}}}},当前目标:{jQuery311069559266060606060606060260442:{$binding:[detail.name],{$binding:[detail.name],jQuery31206950606060606601:{事件:{click:[{type:click,origType:click,guid:127,namespace:}]}在添加属性时,contextmenu不起作用。它现在也不显示选项。其中有些错误?使用另一个属性名称,如data-detaild-id。可能插件也使用此属性。不-只需将其包装到jQuery中。我已更改代码我正在获取控制台。logthis.data'id';-Unfined:现在这个提琴就在你的页面附近吗?检查控制台-它从数据属性打印123。检查你是否有正确的detailId插入到这个属性否。我还不熟悉提琴,也没有在这里附加一个好的片段。正在学习它。但是我标记为“是”的解决方案工作正常。因为我的上下文菜单在t之外他使用了div并在contextmenu定义中进行了一些更改。它工作得很好。感谢您的帮助如何在单击函数中获取单击的对象?我使用了ur snipped$e.currentTarget,它返回{0:{jQuery3110723294038592321:{events:{click:[{type:click,origType:click,guid:102,namespace:},{type:click,origType:click,guid:103,namespace:}}]}},长度:1}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
{{temp}}
<table class="table table-responsive table-hover" id="foldertable">
  <thead>
    <tr style="text-align: center">
      <th>Name</th>
      <th>Members</th>
    </tr>
  </thead>
  <tbody id="projtable">
    <tr ng-repeat="detail in nodes" ng-mouseover="showShare()">
      <td><button id="namesdetails" class="btn btn-link" ng-click="openFolder(detail.id, detail.name)" style="text-decoration: none !important">

 <span class="fa fa-folder" style="font-size: larger"></span> 
{{detail.name}}</button></td>
      <td> -- </td>
    </tr>
  </tbody>
</table>

<!-- context menu -->
<div id="contextMenu" class="dropdown clearfix">
  <ul class="dropdown-menu contextmenustyle" role="menu" aria-labelledby="dropdownMenu">
    <li><a tabindex="-1" attr="edit" href=""><span class="glyphicon glyphicon-edit"></span> Edit/Rename</a></li>
    <li><a tabindex="-1" attr="delete" ng-click="deleteFolder(detail.id)"><span class="glyphicon glyphicon-remove"></span> Delete</a></li>
  </ul>
</div>
$contextMenu.on("click", "a", function(e) {
  console.log(e.target.attributes.attr.value); //delete or edit
  $contextMenu.hide();
});
$(this).parent().find('.contextMenu').css({
  display: "block",
  left: e.pageX,
  top: e.pageY
});