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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值