2013-07-21 12 views
11
if($('#this').val().indexOf('4289')){ 
    Do something 
else 
    Do something. 

Questo funziona solo con quella 4289,
Quando provo ad aggiungere altri numeri per essere indicizzato accanto ad essa con 'o', non funziona. Come dovrei inserire un altro numero. Per esempioCome utilizzare IndexOf in JQuery

IndexOf('4289||78843') 

voglio questo per controllare questo numero e se il numero nel campo di input non è uno di questo, l'eco di errore.

Ecco di più ciò che accade a morire quando si rivisita il campo.

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

risposta

18

Ecco perché sarebbe essere alla ricerca per la stringa '4289||78843', che non esiste nella destinazione sto assumendo. Gli operatori logici non possono essere gettati ovunque, solo dove ci sono valori reali su cui operare logicamente. Qualcosa di simile:

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

Il valore di ritorno della funzione indexOf() è l'indice numerico di tale valore nel valore di riferimento, o -1 se non è trovato. Quindi per ogni valore che stai cercando, vorrai controllare se il suo indice è > -1 (il che significa che si trova nella stringa). Prendi l'intera condizione e || con un'altra condizione, ed è un'operazione logica.

Edit: Per quanto riguarda il tuo commento, se si vuole astratto questo in qualcosa di un po 'più pulito e più generico si potrebbe estrarlo nella propria funzione che itera su un insieme di stringhe e restituisce true se qualcuno di loro sono in la stringa di destinazione. Forse qualcosa di simile:

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

Ci può anche essere un modo più elegante per farlo con .forEach() sulla matrice, ma almeno questo dimostra l'idea. Poi, in un altro punto del codice, creerai la matrice di valori e chiamerai la funzione:

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

Ok, è bello. Sta funzionando. L'unica cosa è che se metterò più di 20 di questi numeri, il codice sarà lungo con molti di questi indici. Non possiamo accorciare qualcosa da qualche parte lì. ? –

+0

@BlessingThinker: Certo, può essere astratto nella sua funzione generale. Ogni volta che nel codice c'è molta copia/incolla, è probabile che almeno una funzione possa essere estratta. Probabilmente ci sono altri approcci oltre a questo, ma sembra abbastanza semplice. Ho aggiornato la risposta con un esempio. – David

+0

Ho usato la sfocatura, quindi uno ne ha inserito il numero giusto che convalida correttamente, ma quando si torna indietro e si cambia quel numero in qualcos'altro, la funzione sembra essere morta. –