2012-01-18 17 views
23

Mam 3 elementy div, każdy z polami wprowadzania danych dfew i następnym przyciskiem. Chcę napisać fragment kodu jQuery, który po kliknięciu następnego przycisku sprawdza, czy wszystkie pola wejściowe w tym samym dziale div, co przycisk, nie mają wartości null.Sprawdź, czy wszystkie pola wejściowe zostały wypełnione za pomocą jQuery

Próbowałem następujących bez powodzenia, ale im 100% pewnym jej źle, tylko nie mogę znaleźć odpowiednich informacji w Internecie ...

http://jsfiddle.net/xG2KS/1/

Odpowiedz

52

Można użyć filter zmniejszyć zbiór wszystkich input elementów tylko do tych, które są puste, i sprawdzić właściwość length co pozostaje:

$(".next").click(function() { 
    var empty = $(this).parent().find("input").filter(function() { 
     return this.value === ""; 
    }); 
    if(empty.length) { 
     //At least one input is empty 
    } 
}); 

Należy zauważyć, że definicja pustej w powyższym kodzie jest pustym ciągiem. Jeśli chcesz, aby puste miejsca były puste, przed porównaniem możesz chcieć je przyciąć.

Należy również pamiętać, że nie ma potrzeby przekazywania this do jQuery wewnątrz funkcji filter. Sam element DOM będzie miał właściwość value, a dostęp do niego będzie znacznie szybszy, zamiast korzystania z val.

Oto updated fiddle.

+1

Ahh genialne, dzięki! – Liam

+0

Nie ma problemu, cieszę się, że mogłem pomóc :) –

+0

Jak można tego użyć z formularzem z tekstem wejściowym i wybrać? –

6
$('.next').click(function() { 
    var emptyInputs = $(this).parent().find('input[type="text"]').filter(function() { return $(this).val() == ""; }); 
    if (emptyInputs.length) { 
     alert('Fail!'); 
    } 
}); 
+0

Dzięki @garvey !, czy jest sposób, aby powiedzieć, że jeśli dowolne wejście jest puste, należy rzucić jedno ostrzeżenie jako przeciwne do zapętlenia? – Liam

+0

Tak, zobacz moje zmiany. Bez pętli. – pltvs

+0

W jaki sposób mogę skręcić wybrać? –

0
$('.next').click(function() { 
    var inputs = $(this).parent().find('input[value=""]'); 
    if (!inputs.length) { 
     // you have empty fields if this section is reached 
    } 
}); 
+0

To powie, że są puste wejścia, nawet jeśli ich nie ma, ponieważ patrzy na atrybut 'value' *, a nie na właściwość. –

+0

Nie śledzę? Ponieważ nie jestem tak dobrze zaznajomiony z jQuery, jak powinienem, czy mógłbyś wyjaśnić? –

+3

Użyłeś selektora atrybutu, aby znaleźć elementy, których atrybut "value" jest równy pustemu ciągowi znaków. Atrybut 'value' * * jest zdefiniowany w samym elemencie:' '. Ponieważ żaden z elementów 'input' nie ma atrybutu' value', twój kod zawsze będzie twierdził, że wszystkie są puste. –

Powiązane problemy