如题,最近做一个项目需要大量使用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