javascript - 如何检查特定的 jQuery UI 函数是否可用,如果不可用则使用其他函数?

标签 javascript jquery jquery-ui jquery-plugins graceful-degradation

我正在编写一个 jQuery 插件,我希望我的代码能够利用 jQuery UI show(effect, [options], [speed], [callback]) hide(effect, [options], [speed], [callback]) 函数,允许您使用漂亮的动画显示和隐藏元素。

但是,如果 jQuery UI 不可用,我也希望我的插件能够正常降级,切换回使用基本的非动画 show()hide() 标准 jQuery API 中的函数。

我需要专门测试显示和隐藏功能,因为即使 jQuery UI 可用,它也可能是自定义版本,不包含 Effects 组件。

起初我以为我可以做这样的事情:

if(typeof myelement.show('blind', 'slow') == 'undefined')
{
    myelement.show('blind', 'slow');
}
else
{
    myelement.show();
}

但这当然行不通,因为即使 UI 不存在,show() 仍然是一个函数,它只是具有不同的签名——所以 typeof 在任何一种情况下都返回 object

那么,检查 jQuery UI 是否可用于我的插件的最佳方法是什么?非常感谢任何帮助!

最佳答案

您可以检查这样的效果:

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'] : []);​

You can view a demo here ,选中/取消选中左侧的 jQuery UI,然后单击顶部的“运行”以查看它的运行情况。这是有效的,因为效果是这样声明的:

$.effects.blind = function(o) { ...effecty stuff... };

例如,你可以看到"blind" here .我检查上面代码中的 $.effects$.effects.effect 的原因是你只能下载 some of the effects when you download jQuery UI ,所以这说明了这种可能性。

关于javascript - 如何检查特定的 jQuery UI 函数是否可用,如果不可用则使用其他函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3060886/

相关文章:

javascript - 为什么厚 Hr 显示 2 行很难看(CSS)?

javascript - 忽略 Safari 的初始页面加载 popstate

javascript - 无法使 HTML 在 jquery 中可见

javascript - Safari 中奇怪的 jQuery $(window).load() 行为

javascript - Jquery 上传预览前的最大高度和最大宽度验证

javascript - var functionName = function() {} vs function functionName() {}

javascript - 如何从javascript调用一个php文件?

jquery - 如何插入新元素,使其以正确的样式显示(使用 jQuery)

javascript - 将值发送到一个输入,然后从 slider 发送到另一个输入

html - Themeroller 图标没有在我期望的位置排列