我正在使用Backbone / Marionette(和Coffeescript)构建一个javascript应用程序,我想检查文本字段中是否包含值。
如果我这样做它不起作用:
questions = $("input[name='questions']").val().split(',')
if questions.indexOf(1) == -1
@ui.check.removeClass("green")
else
@ui.check.addClass("green")
如果我这样做它可以工作(硬编码数组):
questions = [1]
if questions.indexOf(1) == -1
@ui.check.removeClass("green")
else
@ui.check.addClass("green")
我做错了什么?
答案 0 :(得分:1)
来自罚款String.prototype.split
manual:
返回值
在给定字符串中出现分隔符的每个点处分割的字符串数组。
和罚款Array.prototype.indexOf
manual:
<强>描述强>
indexOf()
使用严格相等(searchElement
或三等号运算符使用的相同方法)将===
与数组元素进行比较。
所以当你这样说时:
questions = $("input[name='questions']").val().split(',')
if questions.indexOf(1) == -1
#...
您正在使用严格相等的数字搜索字符串数组(questions
)。在JavaScript中,1 === '1'
永远不会成为现实(与1 == '1'
不同),因此您的搜索将无法找到任何内容。您的硬编码示例有效,因为question
是一个数字(而不是字符串)数组。
搜索字符串:
if questions.indexOf('1') == -1
或在搜索前将字符串转换为数字:
questions = $("input[name='questions']").val().split(',').map (s) -> +s
if questions.indexOf(1) == -1
您使用哪种方法取决于1
的来源以及您打算使用questions
做些什么。