2012-12-01 66 views
21

可能重复:
jQuery test for whether an object has a method?在调用之前检查函数是否存在?

我想,如果函数调用之前就存在设置的JavaScript你能帮助我如何做到这一点,适用于该脚本

$(document).ready(function() { 
    $(".cs-text-cut").lettering('words'); 
}); 
+0

@Alexei:从这个例子来看,我认为它完全一样。即使不是,解决方案(使用'.isFunction')仍然是相同的,并且很容易转移。 –

+0

@FelixKling,你说得对,确切地说是dup。以某种方式解释它扩大(如果一个使用元素,而不是jQuery选择器的结果)。 –

回答

65

我假设你想检查并确保lettering存在,请试试这个:

http://api.jquery.com/jQuery.isFunction/

下面是一个例子:

if ($.isFunction($.fn.lettering)) { 
    $(".cs-text-cut").lettering('words'); 
} 
+1

+1。为了使用'isFunction',注意条件是错误的 - 不应该在窗口上检查一个。 –

+1

以下按预期方式工作: 'if($ .isFunction(window.lettering)){' 如果您有简写方式或更好的方式请随时通知我,我会更新建议。 – gregwhitworth

+3

该函数实际上是在'$ .fn.lettering'中,而不是'window.lettering'。 –

6

如果这是你要测试的lettering功能,你可以这样做这样的;

$(document).ready(function() { 
    var items = $(".cs-text-cut"); 
    if (items.lettering) { 
     items.lettering('words'); 
    } 
}); 

或者,如果你想绝对肯定items.lettering是试图调用之前的函数,你可以这样做:

$(document).ready(function() { 
    var items = $(".cs-text-cut"); 
    if (typeof items.lettering === "function") { 
     items.lettering('words'); 
    } 
}); 

或者,如果你真的不控制环境,你真的不知道,如果刻字函数调用是去工作或没有,甚至可能会引发异常,你可以把一个异常处理周围:

$(document).ready(function() { 
    try { 
     $(".cs-text-cut").lettering('words'); 
    } catch(e) { 
     // handle an exception here if lettering doesn't exist or throws an exception 
    } 
}); 
+1

+1。合理的方式来检查jQuery select结果的属性。添加isFunction检查可能很好,但不是必需的。 –

+0

绝对是我的首选方式,因为它不依赖于额外的库。 – cfx

12

使用此检查functi存在。

<script> 
if (typeof function_name == 'function') { 
     //function_name is a function 
} 
else 
{ 
//do not exist 
} 
</script> 
0

typeof $({}).lettering == 'function'$.isFunction($({}).lettering)应返回一个布尔它是否的产品尚未推出与否。

相关问题