输入.val()多字符串检查

时间:2014-05-01 04:10:59

标签: jquery string input

使用以下内容检查多个字符串是否可以?

 if($("#clueOneInput").find('input[type=text]').val()=='dr1'||'dr')

我原来的

if($("#clueOneInput").find('input[type=text]').val()=='dr1')

完全符合预期(期望)。如果线索是正确的,按照预定的字符串继续。

问题是我想在拼写错误的情况下包含变体。这是允许的吗?我是一个PHP家伙,所以我甚至不确定我对||的使用是否正确。有人有任何见解吗?

5 个答案:

答案 0 :(得分:2)

你可以做你想做的事,但是或者运算符(||)并不是那样的。我将值存储在变量中,然后检查多个选项。只是少打字,例如。

var x = $("#clueOneInput").find('input[type=text]').val();
if(x == 'dr1' || x == 'dr')
{
    //do something
}

修改

这里发生的事情是运营商优先级和类型强制的结果。首先会针对.val()检查'dr1'==的优先级高于OR ||,因此在OR ==之前进行了比较||。现在这将导致布尔值,true或false,那么OR ||将会运行,因此您最终会在if语句中结束false || 'dr'true || 'dr',这两者都解决了为真,如下所示

扩展||

的解释

||是逻辑OR运算符,它是javascript中的条件运算符之一(与&&和!)一起使用。当与布尔表达式一起使用时(如x == 'dr1',即直接解析为true或false)||可以字面上读为OR,所以在上面的代码中,如果x等于,它将读取' ' DP1'或x等于' '。当与不是直接布尔值的表达式一起使用时,它们将被强制为真或假。 如果我暂时忽略原始代码中的if语句(仅适用于此示例),并且只采用逻辑OR表达式('dr1'||'dr'),它没有布尔表达式但直接使用字符串,它实际上解析为第一个价值(' dr1')。为什么?在两个字符串之间使用时。 ||返回解析为true的第一个值(正常)。在js中,除空字符串之外的任何字符串都为true 一些例子

var test1 = "Foo" || "Bar";         // test1 is "Foo"
var test2 = "" || "Bar";            // test2 is "Bar"
var test3 = "" || "" || "Bar";      // test3 is "Bar"
var test4 = "" || "Foo" || "Bar";   // test4 is "Foo"
var test5 = false || "Foo" || "Bar";// test5 is "Foo"

因此表达式'dr1'||'dr'的结果将始终返回'dr1'

注 - 赋值运算符=的优先级低于OR运算符||所以首先执行OR ||,然后执行赋值{{1 }}。这与在OR =

之前首先完成的比较运算符==不同

您应该警惕的值是假的(即,解析为false)是null,0,NaN,空字符串("")或未定义。其他任何东西都是真实的,其中包括(但不限于)正数和负数(因此-1解析为true)和任何字符串(包括' false')

现在在您的特定情况下,||语句总是测试一个布尔表达式,如果表达式不是布尔值,它将被强制转换为布尔值,因此您的两个结果是if或{ {1}}已经解决了#1; dr'并且分别为真。现在' dr'不是空字符串,因此false || 'dr'语句解析为true,当然true为真,因此为什么true || 'dr'语句总是被解析为true。

Logical AND运算符if的行为方式与此类似,但我将其留下了另一天。

另外一点我发现它(if)在定义具有默认参数的函数时非常方便,例如

&&

这是做什么的,如果调用函数提供输入参数,例如

||

然后函数内的function awesomeFunction(inputParam) { inputParam = inputParam|| "Default Value" //more code .. using inputVar } 的值将是"输入值"。如果没有使用任何输入参数调用,例如

awesomeFunction("Input Value");

然后函数内inputParam的值为awesomeFunction(); 。原因是因为第二次调用函数内的inputParam将是"Default Value"。我们知道这会解析为假(falsey),因此inputParam的表达将解析为undefined

无论如何,我想我可能已经被带走了,但我希望有所帮助

参考FYI

Mozilla Developer Network Javascript Expressions and Operators

特别是逻辑运算符和运算符优先级部分

答案 1 :(得分:0)

您必须在每个参数中重复比较运算符||。通过设置变量最容易做到:

var theVal = $("#clueOneInput").find('input[type=text]').val();
if (theVal == 'dr1' || theVal == 'dr') 

答案 2 :(得分:0)

最好的方法是将元素存储在变量中,如果您将使用它多一次。这更容易阅读,您将获得一些性能。省略.val()是一个聪明的事情,所以你可以使用该元素进行更多的程序! jQuery .find()是一个昂贵的函数,所以抽象结果以获得最大的重用是一个好主意。添加.val()会使您的变量不再可重用。

var el = $("#clueOneInput").find('input[type=text]');

if(el.val() == 'dr1'|| el.val() == 'dr')

答案 3 :(得分:0)

这里发生的事情是您的决策声明总是评估为真。你看,使用这段代码,既然你没有在两个值上使用比较运算符,你基本上都会说假或者是真的,在这种情况下,如果左边是假的,那么总是如此。 || == 'dr'永远是真的。

if($("#clueOneInput").find('input[type=text]').val()=='dr1'||'dr')

if(false || true)
if(true || true);

这两个始终都是真的。

你需要这样做:

if($("#clueOneInput").find('input[type=text]').val()=='dr1' || $("#clueOneInput").find('input[type=text]').val() == 'dr')

答案 4 :(得分:0)

尝试multiple attribute selector并结合逗号找到dr1或dr:

if($("#clueOneInput")
.find('input[type="text"][value="dr1"],input[type="text"][value="dr"])