2012-02-27 106 views
1

我想检查jQuery的是否有.hashchange方法参照窗口对象像检查jQuery的方法是否存在

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

,但我不断收到一个“遗漏的类型错误:无法调用‘hasOwnProperty’未定义“的两个浏览器支持&不支持该功能。有任何想法吗?

回答

4

的一种方法是看属性仅仅是未定义

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

注:这实际检查值是否被定义VS名。它可以用一个明确的undefined值来定义价值,但两者大概相当于为您的方案

+0

我waaaaaaaaay慢^ _ ^'+ 1' – Neal 2012-02-27 21:14:29

+0

试图顶一个它没有工作,这是我的解决方案 “的typeof($(窗口).hashchange)=== '未定义' \t \t window.onhashchange = hashChange: \t \t $(窗口).hashchange(hashChange);” – 2012-02-27 21:21:08

0
$(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; 
} 

+0

但它,它只是没有及时装载什么 – 2012-02-27 21:17:16

+0

@MariusMiliunas尝试在控制台此页面。 – Neal 2012-02-27 21:35:24

+0

我明白你在说什么,但如果方法是通过插件连接到窗口属性,比它的属性,例如,复制在控制台 - $(窗口).resize(函数(){的console.log(”东西“)}) - 然后复制 - $(窗口)。数据(”事件) – 2012-02-27 21:38:33