web-dev-qa-db-fra.com

Comment utiliser IndexOf dans JQuery

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

Cela ne fonctionne qu'avec ce 4289,
Lorsque j'essaie d'ajouter d'autres numéros à indexer à côté en utilisant "ou", cela ne fonctionne pas. Comment dois-je mettre un autre numéro. Par exemple

IndexOf('4289||78843') 

Je veux que cela vérifie ces chiffres et si le nombre dans le champ de saisie ne fait pas partie de cela, pour faire écho à l'erreur.

Voici plus qui arrive à mourir quand on revisite le terrain.

$('#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;
        }
    })
13
Blessing Thinker

C'est parce qu'il chercherait la chaîne '4289||78843', Qui n'existe pas dans la cible que je suppose. Les opérateurs logiques ne peuvent pas être lancés n'importe où, uniquement là où il existe des valeurs réelles sur lesquelles opérer logiquement. Quelque chose comme ça:

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

La valeur de retour de la fonction indexOf() est l'index numérique de cette valeur dans la valeur cible, ou -1 si elle n'est pas trouvée. Donc, pour chaque valeur que vous recherchez, vous voudrez vérifier si son index est > -1 (Ce qui signifie qu'il se trouve dans la chaîne). Prenez toute cette condition et || Avec une autre condition, et c'est une opération logique.

Edit: Concernant votre commentaire, si vous voulez résumer cela en quelque chose d'un peu plus propre et plus générique, vous pouvez l'extraire dans sa propre fonction qui itère sur une collection de chaînes et retourne true si l'un d'eux se trouve dans la chaîne cible. Peut-être quelque chose comme ça:

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

Il peut même y avoir une façon plus élégante de le faire avec .forEach() sur le tableau, mais cela démontre au moins l'idée. Ensuite, ailleurs dans le code, vous construisez le tableau de valeurs et appelez la fonction:

var values = ['4289', '78843'];
var target = $('#this').val();
if (isAnyValueIn(target, values)) {
    // At least one value is in the target string
}
23
David