2012-07-15 14 views
21

Jestem raczej osobą PHP, JS nie - i myślę, że mój problem jest bardziej problem składni ..JS jQuery - sprawdzić czy wartość jest w tablicy

Mam mały jQuery „zatwierdzić” i sprawdzić wartość wejściowa.

Działa dobrze dla pojedynczych słów, ale potrzebuję tablicy.

Używam jQuery inArray().

var ar = ["value1", "value2", "value3", "value4"]; // ETC... 

     jQuery(document).ready(function() { 

      jQuery("form#searchreport").submit(function() { 
      if (jQuery.inArray(jQuery("input:first"), ar)){ 
         //if (jQuery("input:first").val() == "value11") { // works for single words 
      jQuery("#divResult").html("<span>VALUE FOUND</span>").show(); 
      jQuery("#contentresults").delay(800).show("slow"); 
       return false; 
       } 

     // SINGLE VALUE SPECIAL CASE/Value not allowed 
       if (jQuery("input:first").val() == "word10") { 

       jQuery("#divResult").html("YOU CHEAT !").show(); 
       jQuery("#contentresults").delay(800).show("slow"); 

       return false; 
       } 

     // Value not Valid 

       jQuery("#divResult").text("Not valid!").show().fadeOut(1000); 

       return false; 
      }); 

     }); 

teraz - if (jQuery.inArray(jQuery("input:first"), ar)) nie działa prawidłowo .. każda wartość, że kładę zostaną zweryfikowane jako OK. (nawet puste)

Muszę sprawdzić poprawność tylko wartości z tablicy (ar).

Próbowałem też if (jQuery.inArray(jQuery("input:first"), ar) == 1) // 1,0,-1 tried all

co robię źle?

Dodatkowe pytanie: jak to zrobić w tablicy w jQuery? (odpowiednik PHP if (!in_array('1', $a)) - I sw somehre że to nie zadziała i trzeba użyć coś takiego:. !!~

+0

'$ .inArray (. ..) == -1' <----- nie ma takiego elementu w tablicy – zerkms

Odpowiedz

54

porównywania obiektu jQuery (jQuery('input:first')) do ciągów (elementów tablicy)
Zmień kod w celu porównania wartości wejście'S (wich jest string) do elementów tablicy:

if (jQuery.inArray(jQuery("input:first").val(), ar) != -1) 

Sposób inArray zwraca -1 jeśli element nie został znaleziony w tablicy, tak jak bonus odpowiedź na pytanie, jak określić ne, jeśli element jest nie w tablicy, użyj tego:

if(jQuery.inArray(el,arr) == -1){ 
    // the element is not in the array 
}; 
+0

Twoje pierwsze "jeśli" założenie es, że '-1' jest traktowane jako wartość falsy? Czy nie powinno to być '! = -1'? +1 dla pełnej odpowiedzi. –

+0

dziękuję, właśnie modyfikując fragment kodu, który musiał się poślizgnąć. –

+0

ok, dziękuję, działa świetnie. ale mam pytanie wyjaśniające - więc nie ma sposobu, aby użyć funkcji 'inArray()' bez porównywania go do '==' -1, '== 0' lub podobne? –

1

chodzi o bonus pytanie, spróbuj if (jQuery.inArray(jQuery("input:first").val(), ar) < 0)

0

alternatywnego rozwiązania z wartości check

//Duplicate Title Entry 
    $.each(ar , function (i, val) { 
     if (jQuery("input:first").val()== val) alert('VALUE FOUND'+Valuecheck); 
    }); 
-1

własnością Array.prototype reprezentuje prototyp konstruktora Array i umożliwia dodawanie nowych properties i methods do wszystkich Array bjects. możemy stworzyć prototyp do tego celu

Array.prototype.has_element = function(element) { 
    return $.inArray(element, this) !== -1; 
}; 

a następnie używać go jak ten

var numbers= [1, 2, 3, 4]; 
numbers.has_element(3) => true 
numbers.has_element(10) => false 

Zobacz Demo poniżej

Array.prototype.has_element = function(element) { 
 
    return $.inArray(element, this) !== -1; 
 
}; 
 

 

 

 
var numbers = [1, 2, 3, 4]; 
 
console.log(numbers.has_element(3)); 
 
console.log(numbers.has_element(10));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Powiązane problemy