2011-01-25 14 views
9

Mam ten kod, ale wydaje się, że nie zwraca on wartości true. Alert zawsze się pokazuje. Wszelkie przemyślenia (bez potrzeby tworzenia var, w którym zapisano, że pole wyboru zostało wybrane, wydaje się nieco odstraszające).Zgłoszenie zatrzymania Jquery należy przesłać, chyba że zaznaczono pole wyboru:

Dzięki.

$("#form").submit(function(e) { 
    $('input[type=checkbox]').each(function() { 
     if(this.checked){ 
      return true; 
     } 
    }); 
    alert("Please select at least one to upgrade."); 
    return false; 
}); 

Odpowiedz

17

Nie trzeba wykonywać pętli, aby sprawdzić, czy pole wyboru jest zaznaczone. Selektor :checked odfiltrowuje wszystko, co nie jest zaznaczone. Następnie można użyć $.length, aby uzyskać liczbę sprawdzonych wejść.

$("#form").submit(function(e) { 
    if(!$('input[type=checkbox]:checked').length) { 
     alert("Please select at least one to upgrade."); 

     //stop the form from submitting 
     return false; 
    } 

    return true; 
}); 

Dodatkowo, wykorzystując swoje podejście, mała zmiana powinna uczynić tę pracę

$("#form").submit(function(e) { 
    $('input[type=checkbox]').each(function() { 
     if($(this).is(':checked')){ 
      return true; 
     } 
    }); 
    alert("Please select at least one to upgrade."); 
    return false; 
}); 

myślę, że może być po prostu brakuje $() wokół this

+0

Dzięki. Ładne, czyste rozwiązanie. Poszedłem na własną wersję, ponieważ wydaje się bardziej czytelna. – edwardmlyte

+0

Natrafiłem ostatnio na problem, w którym e.preventDefault() nie działa z Firefoksem. Z pewnymi badaniami odkryłem, że powrót do prawdziwej lub fałszywej rzeczy spowoduje to samo i jest szerzej akceptowany. Zmieniłem moją odpowiedź, aby odzwierciedlić to podejście. – Josh

0

Przykład sprawdzenie liczby checboxes sprawdzanych ...

<script> 

    function countChecked() { 
     var n = $("input:checked").length; 
     $("div").text(n + (n <= 1 ? " is" : " are") + " checked!"); 
    } 
    countChecked(); 
    $(":checkbox").click(countChecked); 

</script> 

Above "$ (" input: checked ")" zwraca tablicę zaznaczonych elementów ... Można sprawdzić " długość "tej tablicy dla bycia> 0.

+0

Wydaje się nieco zbędne, aby to zrobić, jeśli już pętli tablicy z jquery. Ale rozumiem, miałem nadzieję, że będę mógł kontynuować przesyłkę, jeśli przynajmniej jeden jest sprawdzany. – edwardmlyte

3

Aby podkreślić, używasz identyfikatora #form. Czy chodziło Ci o odszukanie wszystkich formularzy, czy też formularz ma identyfikator form?

+0

Ma inny identyfikator, do którego właściwie się odwołuję. Po prostu zmieniłem to, aby uprościć. – edwardmlyte

0

kod do kliknięcia i wprowadzić przycisk Prześlij :

$(":input").bind("click keypress", function(evt) { 
    var keyCode = evt.which || evt.keyCode; 
    var sender = evt.target;     
    if (keyCode == 13 || sender.type == "submit") {       
     evt.preventDefault(); 
     // add your validations 
    } 
    // and submit the form 
} 
-1
var atleast = 1; 
function validate() { 
    debugger; 
    var CHK = document.getElementById("<%=chk1"); 
    var checkbox = document.getElementsByTagName("input"); 
    var counter = 0; 
    for (var i = 0; i < checkbox.length; i++) { 
     if (checkbox[i].checked) { 
      counter++; 
     } 
    } 
    if (atleast > counter) { 
     alert("Please select atleast " + atleast + " employee "); 
     return false; 
    } 
    return true; 
} 

<button type="submit" name="Initiate" value="Initiate" on click="return validate()" id=" initiate"></button> 
+0

Proszę przejrzeć [jak napisać dobrą odpowiedź] (http://stackoverflow.com/help/how-to-answer). Dodaj odniesienia i wyjaśnij, dlaczego odpowiedź jest tym, czego powinni posłuchać ludzie. –

Powiązane problemy