版本:1.4.

menu的disableItem方法不能禁用使用onClick方式绑定的事件。

解决思路如下:

重写disableItem方法和enableItem方法。

/*** menu方法扩展* @param {Object} jq* @param {Object} itemEl*/
$.extend($.fn.menu.methods, {/*** 激活选项(覆盖重写)* @param {Object} jq* @param {Object} itemEl*/enableItem : function(jq, itemEl) {return jq.each(function(){var jqElements = $(itemEl);var state = $.data(this, 'menu');if (jqElements.length > 0) {jqElements.each(function(){if ($(this).hasClass('menu-item-disabled')) {for(var i=0; i<state._eventsStore.length; i++){var itemData = state._eventsStore[i];if(itemData.target == this){//恢复超链接if (itemData.href) {$(this).attr("href", itemData.href);}//回复点击事件if (itemData.onclicks) {for (var j = 0; j < itemData.onclicks.length; j++) {$(this).bind('click', itemData.onclicks[j]);}}//设置target为null,清空存储的事件处理程序itemData.target = null;itemData.onclicks = [];$(this).removeClass('menu-item-disabled');}}}});}});},/*** 禁用选项(覆盖重写)* @param {Object} jq* @param {Object} itemEl*/disableItem : function(jq, itemEl) {return jq.each(function() {var jqElements = $(itemEl);var state = $.data(this,'menu');if (jqElements.length > 0) {if (!state._eventsStore)state._eventsStore = [];jqElements.each(function(){if (!$(this).hasClass('menu-item-disabled')) {var backStore = {};backStore.target = this;backStore.onclicks = [];//处理超链接var strHref = $(this).attr("href");if (strHref) {backStore.href = strHref;$(this).attr("href", "javascript:void(0)");}//处理直接耦合绑定到onclick属性上的事件var onclickStr = $(this).attr("onclick");if (onclickStr && onclickStr != "") {backStore.onclicks[backStore.onclicks.length] = new Function(onclickStr);$(this).attr("onclick", "");}//处理使用jquery绑定的事件var eventDatas = $(this).data("events") || $._data(this, 'events');if (eventDatas["click"]) {var eventData = eventDatas["click"];for (var i = 0; i < eventData.length; i++) {if (eventData[i].namespace != "menu") {backStore.onclicks[backStore.onclicks.length] = eventData[i]["handler"];$(this).unbind('click', eventData[i]["handler"]);i--;}}}//遍历_eventsStore数组,如果有target为null的元素,则利用起来var isStored = false;for(var j=0; j<state._eventsStore.length; j++){var itemData = state._eventsStore[j];if(itemData.target==null){isStored = true;state._eventsStore[j] = backStore;}}//没有现成的,则push进去if(isStored==false){state._eventsStore[state._eventsStore.length] = backStore;}$(this).addClass('menu-item-disabled');}});}});}
});

  转自:http://www.easyui.info/archives/373.html

转载于:https://www.cnblogs.com/shikelong/p/4173090.html

easyui-menu 解决disableItem不能禁用绑定事件的方法相关推荐

  1. JavaScript绑定事件的方法[3种]

    要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数.所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称. 在JavaScript中,有三种常用的 ...

  2. jQuery绑定事件的方法四种方法

    jq给元素绑定事件的方法有4种, 1.bind()  2.live()  3.live()  4.on()  //on常用 一:bind(type,[data],function(eventObjec ...

  3. vue中 点击事件的写法_vue实现绑定事件的方法实例代码详解

    一.前言 vuejs中的事件绑定,使用来完成的,这里函数名是定义在Vue实例中的methods对象中的,Vue实例可以直接访问其中的方法. 二.事件绑定方式 1. 直接在标签中写js方法 执行方法的第 ...

  4. jQuery给动态添加的元素绑定事件的方法

    jquery中绑定事件一般使用bind,或者click,但是这只能是对已经加载好的元素定义事件,那些后来添加插入的元素则需要另行绑定.在1.7版本以前使用live.但是在1.8版本以后推荐使用on.这 ...

  5. 解决浏览网页禁用鼠标右键的方法

    我们在上网时有时候会碰到过这种的情况:当我们在某个网站看到网页上有精美图片或者精彩文字想保存的时候,点击鼠标右键就弹出个窗口,上面写着"什么什么的版权所有",要不就是一点击鼠标右键 ...

  6. es6 模板字符串中绑定事件的方法

    step1: 模板字符传中写法 renderDom() {return `<div data-action="goDetail" data-url="${item. ...

  7. React 绑定事件为什么会丢失this? 和如何解决绑定事件this指向问题

    React 绑定事件为什么会丢失this? 先来看一个小案例 我们先来定义一个类 Test class Test{fun(){console.log("test")}demo(){ ...

  8. js绑定事件和解绑事件的方法

    绑定事件的方法 元素函数 <input onclick="alert('哈哈')" type="button" value="点击我,弹出警告框 ...

  9. Jquery绑定事件(bind和live的区别)[转]

    Jquery中绑定事件有三种方法:以click事件为例 (1)target.click(function(){}); (2)target.bind("click",function ...

最新文章

  1. R语言ggplot2可视化添加希腊字母标签:图表题(title)中加入希腊字母、图中加入希腊字母标签
  2. 几种P2P流媒体开源项目介绍
  3. Spring集成–从头开始应用程序,第2部分
  4. 电脑用linux命令大全,电脑操作时常用的一些Linux命令
  5. 题目1089:数字反转(简单数字转换)
  6. c++实现web服务框架
  7. 切图后用ie6浏览时切片间有空隙
  8. Sentinel降级_RT_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0039
  9. GB28181协议--心跳
  10. Coil:为Kotlin而生的图片加载框架
  11. 哔哩哔哩mac客户端!亲测!支持big sur系统
  12. Java语言 Timer 定时器的四种使用方式
  13. xss.haozi.me靶场详解
  14. 【MC-CNN论文翻译】Computing the Stereo Matching Cost with a Convolutional Neural Network
  15. python生成带照片的二维码图片_Python生成带文字的二维码
  16. 【java毕业设计】基于java+SSH+JSP的固定资产管理系统设计与实现(毕业论文+程序源码)——固定资产管理系统
  17. python爬取京东商品评价信息
  18. CMD(命令提示符)命令大全及网络安全课程中所用到的命令
  19. springboot访问下载/resource/static下的静态资源;下载excel文件损坏,打不开
  20. 什么是promise,promise的用法。

热门文章

  1. python dataframe取某行某列_pandas dataframe.apply() 实现对某一行/列进行处理获得一个新行/新列...
  2. mysql不同实例数据同步_两台Mysql数据库数据同步实现实例
  3. mysql设置约束l命令_2、MYSQL 基本数据库命令及约束
  4. java map 输入 查询 修改_Mybatis增删改查mapper文件写法详解
  5. mysql reflush pri_mysql忘记root密码拯救方法(flush privileges)
  6. 递归下降文法C语言实验报告,递归下降语法分析器实验报告.doc
  7. vue 函数 路由跳转_vue中通过路由跳转的三种方式
  8. oracle查询不走索引全表扫描,使用索引快速全扫描(Index FFS)避免全表扫描的若干场景-Oracle...
  9. android fragment activity 交互,Android基础之Fragment与Activity交互详解
  10. gps两点距离 php,PHP应用:PHP计算百度地图两个GPS坐标之间距离的方法