2012-07-06 17 views
5

Mam formularz z niektórymi wartościami akcji i onsubmit, który jest przesyłany przez znacznik wejściowy submit. Problemem jest to, że powinien on być submittable dwoma przyciskami, więc napisałem funkcję drugiego przycisku, aby zmienić akcję i wartości onSubmit formularza:javascript formularz zmiany dynamicznie onsubmit

<a href="javascript:submitCompare()" class="submit">Compare</a> 

function submitCompare() 
{ 
    document.myForm.action = "anotherAction.php"; 
    document.myForm.onsubmit = function() {return countChecked()}; 
    document.myForm.submit(); 
} 

function countChecked() 
{ 
    var n = $(".reports input:checked").length; 
    if (n >= 3) { 
    alert ('You must select less than 3 reports.'); 
    return false; 
    } 
    else return true; 
} 

Po kliknięciu na przycisk Porównaj odwołuje wysyła mnie do Strona anotherAction.php poprawnie, ale nawet gdy mam więcej niż 2 zaznaczone pola wyboru (co jest zasadą sprawdzania poprawności). Czy ktoś może mi pomóc, aby funkcja onsubmit działała poprawnie?

+0

Tak na marginesie, myślę, że '(n> 2)' wystarczy zamiast '(n> = 3)' – codingbiz

Odpowiedz

1

W submitCompare(), jawnie i bezwarunkowo zadzwonić

document.myForm.submit(); 

Co prawdopodobnie chcesz zamiast istnieje

if (countChecked()) { 
    document.myForm.submit(); 
} 
+0

Wielkie dzięki, to upraszcza cały pomysł i działa! – user1507558

+0

nie zapomnij przyjąć poprawnej odpowiedzi ;-) (znacznik wyboru po lewej) –

4
document.myForm.onsubmit = function() {return countChecked()}; 

powinny być

document.myForm.onsubmit = function(e) { 
    e = e || window.event; 
    if (!countChecked()) { 
     e.preventDefault(); 
     e.returnValue = false; 
    } 
}; 

Wracając false na zasadzie przedstawienia będzie właśnie końca dalszego wykonywania funkcji. Chcesz zapobiec wysyłaniu zgłoszenia, jeśli nie chcesz go przesyłać.

+0

próbowałem, ale nie było żadnej zmiany w zachowaniu procesu przesyłania. – user1507558

+0

Być może jest to Twoja funkcja countChecked. spróbuj zrobić jakiś plik console.log, aby sprawdzić, czy pobiera on odpowiednią liczbę zaznaczonych pól wyboru: – Trevor

+0

countChecked() zwróciło poprawne wartości. Naprawdę nie wiem, dlaczego twoje rozwiązanie nie działało, ale @Oto Allmendinger dobrze mi pasowało, więc sprawa zamknięta :) – user1507558

2

Jest późny odpowiedzi, ale jeśli ktoś szuka w tym ...

zamiast:

document.myForm.onsubmit = function() {return countChecked()}; 

Chyba chciałeś:

document.myForm.setAttribute("onsubmit", "return countChecked()"); 
+0

Zapisałeś mój cenny czas ostatniej minuty – TheRumboJumbo

Powiązane problemy