如何检查如果一个特定的jQuery UI的功能是可用的,并使用不同的功能,如果它不是?
-
28-09-2019 - |
题
我正在写一个jQuery插件,我想我的代码采取的jQuery UI的show(effect, [options], [speed], [callback])
和hide(effect, [options], [speed], [callback])
功能,让您展现,并用漂亮的动画隐藏要素优势。
然而,我也喜欢我的插件正常降级如果jQuery的用户界面不可用,切换回使用基本的,非动画show()
和hide()
存在的标准的jQuery API中的函数。
我需要测试的显示和隐藏功能明确,因为即使jQuery用户界面的为可用它可能是一个定制版本,而不会影响组件包括在内。
起初我还以为我也许可以这样做:
if(typeof myelement.show('blind', 'slow') == 'undefined')
{
myelement.show('blind', 'slow');
}
else
{
myelement.show();
}
不过,当然,这并不工作,因为即使UI不存在,show()
仍然是一个函数,它只是具有不同的签名,以便typeof
返回在任一情况下object
。
那么,什么是对我来说,以检查是否jQuery用户界面是提供给我的插件的最佳方式?任何帮助深表感谢!
解决方案
可以检查这样的效果:
function hasEffect(effect) {
return $.effects && $.effects[effect];
}
然后你可以使用任何地方:
if(hasEffect('blind')) {
myelement.show('blind', 'slow');
} else {
myElement.show();
}
//or, you can shorten it further:
//$.fn.show.apply(myelement, hasEffect('blind') ? ['blind','slow'] : []);
你可以在这里观看演示,选中/清除jQuery UI的左侧,然后单击“运行”往上顶看到它在行动。这工作,因为效果声明如下:
$.effects.blind = function(o) { ...effecty stuff... };
例如,可以看到”盲”这里。我同时检查$.effects
和$.effects.effect
在上面的代码的原因是您只能下载的一些的了当你下载的jQuery UI ,所以这占了这种可能性的影响。
其他提示
尼克的功能完美地工作;为了一致性,我结束了将其添加为一个jQuery效用函数从我的插件代码内:
$.extend({
hasEffect: function (effect) {
return $.effects && $.effects[effect];
}
});
所以,现在我可以打电话$.hasEffect(effectname)
任何地方我要检查的特定jQuery用户界面效应的存在。
不隶属于 StackOverflow