查看linkbutton的源码,发现按钮失效时,只处理了href属性和onclick属性产生的事件。
function setDisabled(target, disabled){
var state = $.data(target, 'linkbutton');
var opts = state.options;
$(target).removeClass('l-btn-disabled l-btn-plain-disabled');
if (disabled){
opts.disabled = true;
var href = $(target).attr('href');
if (href){
state.href = href;
$(target).attr('href', 'javascript:void(0)');
}
if (target.onclick){
state.onclick = target.onclick;
target.onclick = null;
}
opts.plain ? $(target).addClass('l-btn-disabled l-btn-plain-disabled') : $(target).addClass('l-btn-disabled');
} else {
opts.disabled = false;
if (state.href) {
$(target).attr('href', state.href);
}
if (state.onclick) {
target.onclick = state.onclick;
}
}
}
如果linkbutton在创建时就设了disable属性,扩展无用,因为这时会调用easuyi本身的失效方法。
$.extend($.fn.linkbutton.methods, {
disable: function (jq, newposition) {
return jq.each(function () {
setDisabled(this, true);
});
},
enable: function (jq, newposition) {
return jq.each(function () {
setDisabled(this, false);
});
}
});
function setDisabled(target, disabled) {
var state = $.data(target, 'linkbutton');
var opts = state.options;
$(target).removeClass('l-btn-disabled l-btn-plain-disabled');
if (disabled) {
opts.disabled = true;
var href = $(target).attr('href');
if (href) {
state.href = href;
$(target).attr('href', 'javascript:void(0)');
}
if (target.onclick) {
state.onclick = target.onclick;
target.onclick = null;
}
if ($._data(target).events && $._data(target).events.click) {
state.jclick = $._data(target).events.click.map(function (r) {
return { namespace: r.namespace, handler: r.handler };
});
$(target).unbind('click');
}
opts.plain ? $(target).addClass('l-btn-disabled l-btn-plain-disabled') : $(target).addClass('l-btn-disabled');
} else {
opts.disabled = false;
if (state.href) {
$(target).attr('href', state.href);
}
if (state.onclick) {
target.onclick = state.onclick;
}
if (state.jclick)
for (var i = 0; i < state.jclick.length; i++) {
var click = state.jclick[i];
$(target).bind('click' + (click.namespace ? '.' + click.namespace : ''), click.handler);
}
}
}