JQuery中如何使用IndexOf

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;
        }
    })
1个回答

29

那是因为它会寻找字符串'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
}

好的,很好。它正在工作。唯一的问题是,如果我要输入超过20个这些数字,代码就会变得很长,并且有很多这些索引。我们不能在某个地方缩短一些东西吗? - Blessing Thinker
@BlessingThinker:当然,它可以抽象成自己的通用函数。如果代码中有很多复制/粘贴操作,那么至少可以提取一个函数。除了这种方法之外,可能还有更多的方法,但这似乎足够直接了当。我已经更新了答案,并附上了一个示例。 - David
@BlessingThinker:听起来完全是另一个问题,我需要看到更完整的代码才能解决。 - David
好的。在加载后,输入一个错误的数字,它会显示错误,但是现在输入正确的数字,我接受,然后更改该数字,现在它不再显示错误。不要删除该数字,只需添加一位数字。 - Blessing Thinker
@BlessingThinker:仅凭最终结果的描述而没有实际示例,提供的信息并不充分。当它无法工作时,事件处理程序是否被调用?在调试该调用时,它在哪个阶段失败?我很想帮忙,但到目前为止,我所知道的只有“它无法工作”,这并不能真正帮助我。 - David
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接