【问题标题】:Check whether jQuery method exists检查jQuery方法是否存在
【发布时间】:2012-02-27 21:11:49
【问题描述】:

我正在尝试检查 jQuery 是否具有对窗口对象的 .hashchange 方法引用,例如

$(window).data('events').hasOwnProperty('hashchange') ?
    $(window).hashchange(hashChange) :
    window.onhashchange = hashChange;

但在支持和不支持该功能的两种浏览器中,我不断收到“未捕获的类型错误:无法调用未定义的方法 'hasOwnProperty'”。有什么想法吗?

【问题讨论】:

    标签: methods jquery hashchange


    【解决方案1】:

    一种方法是查看属性是否只是未定义

    if ($(window).hashchange === undefined) {
      // Not defined
    }
    

    注意:这实际上检查了值是否已定义与名称。可以使用显式 undefined 值定义该值,但对于您的场景来说,这两者可能是等效的

    var x = {}
    x.test = undefined;
    x.hasOwnProperty("test") // true
    x.test === undefined // true
    

    【讨论】:

    • 我好慢^_^ +1
    • 试了上面那个没用,这是我的解决方案 "typeof($(window).hashchange) === 'undefined' ? window.onhashchange = hashChange : $(window).hashchange (hashChange);"
    【解决方案2】:
    $(window).data('events') === undefined
    

    因此它有没有属性。


    你需要做的是首先确保数据包含一个对象:

    var window_data = $(window).data('events');
    
    if(window_data !== undefined){
       window_data.hasOwnProperty('hashchange') ?
        $(window).hashchange(hashChange) :
        window.onhashchange = hashChange;
    }
    else {
        window.onhashchange = hashChange;
    }
    

    【讨论】:

    • 但确实如此,只是没有及时加载或其他什么
    • @MariusMiliunas 在此页面的控制台中尝试。
    • 我明白你在说什么,但是如果通过插件将方法附加到窗口属性,则它具有属性,例如,在控制台中复制 - $(window).resize(function( ) { console.log('something') }) - 然后复制 - $(window).data('events')
    • 我不知道它是否与 jquery 的初始化顺序有关,但是在编译期间(就绪事件之后) $(window).data('events') 在两个浏览器中都返回 undefined 。就像我在上一篇文章中发布的那样,这是唯一对我有用的东西 typeof($(window).hashchange) (“未定义”作为字符串或“函数”,如果存在)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2012-04-14
    • 2018-08-04
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    相关资源
    最近更新 更多