2016-09-16 146 views
-1

我想重用一个函数,并且当我试图把它放入indexOf()的内部时,我正在定义一个打破函数的变量。我尝试了几个近似值,但我无法弄清楚它为什么不起作用。该代码是这样的:indexOf里面的javascript变量

function toggleSelectAll(control, nadaValue) { 
var allOptionIsSelected = (control.val() || []).indexOf('"' + nadaValue + '"') > -1; 

在功能上是打破的情况下,toggleSelectAll被称为像这样:

toggleSelectAll($(this), 1); 

试图替补多此一:

function toggleSelectAll(control) { 
var allOptionIsSelected = (control.val() || []).indexOf("1") > -1; 

你可以看到几个JSFiddle的例子来说明更好:

这个作品:http://jsfiddle.net/victorRGS/o8cjtoqp/1/

这并不:http://jsfiddle.net/victorRGS/o8cjtoqp/2/

如果您可以在此抛出一些轻那就太好了!提前致谢!

+3

试试'.indexOf(nadaValue)'? – tcooc

+1

首先,删除变量名称周围的引号。目前'indexOf'试图找到文字'“1”'。然后你需要传递一个字符串,或者找到'nadaValue.toString()',因为'indexOf'使用严格的比较。 – Teemu

+0

好吧,我找到了解决方案,是@Teemu说的,我必须转换'nadaValue.toString()',它的工作就像一个魅力。感谢您的回答。我是否应该在此留言或发表适当的答复评论? –

回答

0

indexOf使用严格的比较时,可以从数组中找到参数。

您拥有的数据是字符串类型。但是,您传递的号码为nadaValue,因此indexOf始终无法从数组中找到匹配项。

要解决此问题,您必须传递一个字符串作为nadaValue,或在indexOf中使用之前将其明确转换为字符串。一种方便的方法是创建一个临时字符串:

(... indexOf(nadaValue.toString()) ...)

这样你可以保留号码类型,如果在后面的代码需要它。

+0

这就是我需要的答案! –

0

您的代码存在问题。 indexOf()函数使用严格比较,即与将比较数据和数据类型的'==='进行比较。因此,在比较nadaValue时,它(indexOf())正在检查字面1而不是字符串1,即“1”。

+0

解释是正确的,但修复不是。虽然'indexOf(“1”)'工作,你的答案不应该工作? – Teemu

+0

谢谢@Teemu。我正在考虑第二把小提琴作为工作的例子。更新了答案。 – Abhijeet