easyui-linkbutton 禁用启用之后 href失效的问题

如题,最近做一个项目需要大量使用linkbutton,而且需要实现按钮之间的互动,多个关联按钮之间状态要互相控制切换,然后就用到了linkbutton('disable')和linkbutton('enable'),当然问题也就随之而来了,在重复执行$('.easyui-linkbutton').linkbutton('disable')之后,即使通过enable把某个按钮设置为可用状态了,但是click之后确没有任何反应,看浏览器状态栏,明显的是按钮还在沉睡中的样子,什么情况呢??语法逻辑反反复复看过,绝对没问题,是什么问题呢,我在网上查了好一阵,网上给出说是easyui有BUG,我真不敢相信啊,真的吗,怀着对easyui的无比信任,我起初还真不信,但是我就是找不到原因何在,问题始终需要解决,于是我抱着试试的态度,按照网上的方法做了一个关于linkbutton的扩展脚本,一试,嘿,还真别说,问题解决了!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/**
  * linkbutton方法扩展
  * @param {Object} jq
  */
 $.extend($.fn.linkbutton.methods, {
     /**
      * 激活选项(覆盖重写)
      * @param {Object} jq
      */
     enable: function(jq){
         return jq.each(function(){
             var state = $.data(this'linkbutton');
             if ($(this).hasClass('l-btn-disabled')) {
                 var itemData = state._eventsStore;
                 //恢复超链接
                 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('l-btn-disabled');
             }
         });
     },
     /**
      * 禁用选项(覆盖重写)
      * @param {Object} jq
      */
     disable: function(jq){
         return jq.each(function(){
             var state = $.data(this'linkbutton');
             if (!state._eventsStore)
                 state._eventsStore = {};
             if (!$(this).hasClass('l-btn-disabled')) {
                 var eventsStore = {};
                 eventsStore.target = this;
                 eventsStore.onclicks = [];
                 //处理超链接
                 var strHref = $(this).attr("href");
                 if (strHref) {
                     eventsStore.href = strHref;
                     $(this).attr("href""javascript:void(0)");
                 }
                 //处理直接耦合绑定到onclick属性上的事件
                 var onclickStr = $(this).attr("onclick");
                 if (onclickStr && onclickStr != "") {
                     eventsStore.onclicks[eventsStore.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") {
                             eventsStore.onclicks[eventsStore.onclicks.length] = eventData[i]["handler"];
                             $(this).unbind('click', eventData[i]["handler"]);
                             i--;
                         }
                     }
                 }
                 state._eventsStore = eventsStore;
                 $(this).addClass('l-btn-disabled');
             }
         });
     }
 });

就是这段,加入到你使用linkbutton所在的页面,linkbutton禁用后复用的问题就解决了。

本文转自问道博客51CTO博客,原文链接http://blog.51cto.com/450236/1840590如需转载请自行联系原作者


crackernet

上一篇:Progressive Web Apps入门


下一篇:默认.htpl改为.htpl