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

ta działa tylko z tym 4289,
Gdy próbuję dodać inne numery mają być indeksowane obok go za pomocą „lub”, to nie działa. Jak powinienem wstawić inny numer. E.gJak korzystać IndexOf w JQuery

IndexOf('4289||78843') 

Chcę to sprawdzić numery i jeśli numer w polu wejściowym nie jest jednym z tego, echo błąd.

Oto więcej rzeczy, które zdarzają się, gdy ktoś powraca na pole.

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

Odpowiedz

18

To dlatego, że byłoby to szuka napisu '4289||78843', która nie istnieje w docelowej Jestem zakładając. Operatory logiczne nie mogą być po prostu rzucane gdziekolwiek, tylko tam, gdzie istnieją rzeczywiste wartości logicznie działające. Coś takiego:

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

wartość powrotna funkcji indexOf() stanowi wskaźnik liczbowy, że wartości docelowej wartości, -1 lub jeżeli nie jest znalezione. Tak więc dla każdej wartości, której szukasz, chcesz sprawdzić, czy jej indeks to > -1 (co oznacza, że ​​znajduje się w ciągu znaków). Podejmij ten cały warunek i uzyskaj inny warunek, a to jest operacja logiczna.

Edit: Odnośnie Twojego komentarza, jeśli chcesz streszczenie to w coś trochę czystsze i bardziej ogólny można wyodrębnić go do własnej funkcji, które wykonuje iteracje nad zbiorem ciągów i zwraca true czy któryś z nich są w ciąg docelowy. Może coś takiego:

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

Nie może być nawet bardziej elegancki sposób to zrobić z .forEach() na tablicy, ale przynajmniej pokazuje ideę. Następnie w innym miejscu kodu zbudujesz tablicę wartości i wywołasz funkcję:

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

OK, to miłe. To działa. Jedyne, co mam zrobić, to jeśli wprowadzę więcej niż 20 liczb, kod będzie długa z wieloma takimi indeksami. Nie możemy skrócić czegoś gdzieś tam. ? –

+0

@BlessingThinker: Oczywiście, można go wyodrębnić do własnej funkcji ogólnego przeznaczenia. Za każdym razem, gdy w kodzie jest dużo kopiowania/wklejania, najprawdopodobniej funkcja ta może zostać wyodrębniona. Prawdopodobnie istnieje więcej podejść poza tym, ale wydaje się to dość proste. Zaktualizowałem odpowiedź na przykładzie. – David

+0

Użyłem rozmycia, a następnie jeden z nich podaje prawidłowy numer poprawnie, ale kiedy wrócisz i zmienisz ten numer na coś innego, ta funkcja wydaje się być martwa. –