代码之家  ›  专栏  ›  技术社区  ›  Mark Bell

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

  •  3
  • Mark Bell  · 技术社区  · 14 年前

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

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

    我需要专门测试显示和隐藏函数,就像jquery ui一样 可用,它可能是一个自定义版本,不包括效果组件。

    一开始我想我可能会做如下的事情:

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

    但这当然不起作用,就好像用户界面不存在一样, 显示() 仍然是一个函数,它只是有一个不同的签名,所以 typeof 收益率 object 在任何一种情况下。

    那么,什么是检查jquery ui是否可用于插件的最佳方法?非常感谢您的帮助!

    2 回复  |  直到 14 年前
        1
  •  2
  •   Nick Craver    14 年前

    您可以检查这样的效果:

    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用户界面,然后单击“运行”顶部以查看它的运行情况。这是因为效果声明如下:

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

    例如,您可以看到 "blind" here . 我检查两者的原因 $.effects $.effects.effect 在上面的代码中,您只能下载 some of the effects when you download jQuery UI 所以这就解释了这种可能性。

        2
  •  1
  •   Mark Bell    14 年前

    Nick的函数运行得很好;为了保持一致性,我最终将其添加为插件代码中的jquery实用程序函数:

    $.extend({
        hasEffect: function (effect) {
            return $.effects && $.effects[effect];
        }
    });
    

    所以现在我可以打电话 $.hasEffect(effectname) 我想在任何地方检查是否存在特定的jquery ui效果。