21
if($('#this').val().indexOf('4289')){
    Do something
else
    Do something. 

这仅适用于那个4289
当我尝试使用“或”添加其他要在其旁边编制索引的数字时,它不起作用。我应该如何输入其他号码。例如

IndexOf('4289||78843') 

我希望它检查这些数字,如果输入字段中的数字不是其中之一,则回显错误。

当一个人重新回到这个领域时,还有更多的事情发生。

$('#Zip').blur(function(){
        if (($(this).val().indexOf('0860') > -1)||($(this).val().indexOf('0850') > -1)){
        $('#Status_Zip').html("No way.")
        $(this).alterClass('*_*', 'Success')
        return false;
        }else{$('#Status_Code').hide()
        $(this).alterClass('*_*', 'Error')
        $(this).css('border-color', '#F00').css('background-color', '#FFC').effect("pulsate",{times:4},2)
            return true;
        }
    })
4

1 回答 1

27

那是因为它会寻找'4289||78843'我假设的目标中不存在的字符串。逻辑运算符不能随便扔在任何地方,只能在有实际值进行逻辑操作的地方。像这样的东西:

if(($('#this').val().indexOf('4289') > -1) ||
   ($('#this').val().indexOf('78843') > -1))

函数的返回值indexOf()是该值在目标值中的数字索引,如果未找到,则返回 -1。因此,对于您要查找的每个值,您需要检查它的索引是否是> -1(这意味着它在字符串中找到)。将整个条件||与另一个条件结合起来,这是一个合乎逻辑的操作。

编辑:关于您的评论,如果您想将其抽象为更简洁和更通用的东西,您可以将其提取到自己的函数中,该函数迭代字符串集合并返回true如果它们中的任何一个在目标字符串中。也许是这样的:

function isAnyValueIn(target, values) {
    for (var i = 0; i < values.length; i++) {
        if (target.indexOf(values[i]) > -1) {
            return true;
        }
    }
    return false;
}

甚至可能有一种更优雅的方法可以.forEach()在数组上做到这一点,但这至少证明了这个想法。然后在代码的其他地方构建值数组并调用函数:

var values = ['4289', '78843'];
var target = $('#this').val();
if (isAnyValueIn(target, values)) {
    // At least one value is in the target string
}
于 2013-07-21T20:00:32.220 回答