2009-07-01 25 views
5

Mam formularz z czterema listami rozwijanymi. Domyślną wybraną opcją we wszystkich listach jest "Proszę wybrać". Chcę używać Jquery, aby upewnić się, że wszystkie listy rozwijane mają wartość przed przesłaniem strony, ale mój kod działa tylko na pierwszym. Czy ktoś ma sposób na sprawdzenie wszystkich list jednocześnie?Wybierz opcję Nie wybrano

function doconfirm() { 
    if ($('select').val() == '') { 
    alert("Please Select All Fields"); 
    } 
} 

Jestem pewien, że czegoś mi brakuje, ale nie mogę tego zrozumieć. Dzięki

+0

Zgaduję, że skoro nie jest to funkcja, która działa tylko na pierwszym zaznaczeniu na stronie ????? –

+0

Dzieje się tak, ponieważ polecenie .val() zwraca tylko wartość pierwszego elementu w zbiorze opakowanym (obiekt jQuery). W związku z tym należy sprawdzić wartość każdego elementu w opakowaniu owiniętym –

Odpowiedz

8

function doconfirm() { 
    if ($('select').each(function() { 
    if($(this).val() == '') { 
     alert("Please Select All Fields"); 
     return(false); 
    } 
    }); 
} 
+1

każdy jest dokładnie to, czego potrzebujesz. http://docs.jquery.com/Core/each –

+2

Upewnij się, że Twój html jest poprawny - i zwróci różne rzeczy za pomocą val(). Pierwszy to pusty ciąg znaków, drugi zwraca "Proszę wybrać" – artlung

+1

Dzięki, że to zrobili. –

0
$('select').each(function(s){if(!this.val())...}); 
4

Nieznaczne wahania na podejściu @mgroves, ten jawnie testy do co najmniej jednej wybranej opcji i alertów na pierwszym zaznaczyć, że nie ma. Jeżeli istnieje jakakolwiek zaletą tego podejścia, to lepiej czytelność (zwłaszcza od stosowania .val() jest niejednoznaczna do tego celu):

function doconfirm() { 
    if($('select').each(function() { 
    if(!$(this).find('option:selected').length) { 
     alert("Please Select All Fields"); 
     return(false); 
    } 
    }); 
} 
1

dla innego spojrzenia na to dlaczego nie korzystać

function doConfirm() { 

    var toReturn = true; 

    if ($('select').filter(function(){ 
      return $(this).val() === ''; 
     }).length) { 

     toReturn = false; 
     //notify user 

    } 

    return toReturn; 
} 
Powiązane problemy