zoukankan      html  css  js  c++  java
  • easyui-menu 解决disableItem不能禁用绑定事件的方法

    版本: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

  • 相关阅读:
    Python 异常处理
    Python File(文件) 方法
    python 文件定位
    globals() 和 locals() 函数
    python dir()函数
    python from…import* 语句
    python from…import 语句
    Python 模块
    python 匿名函数
    python 函数参数
  • 原文地址:https://www.cnblogs.com/shikelong/p/4173090.html
Copyright © 2011-2022 走看看