我正在写一个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用户界面效应的存在。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top