2014-11-04 13 views
8

Mam funkcji .Kliknij() na przycisku złożyć w formie:jquery click() w przedstawienia przycisk

$("#submitId").click(function() { 
    $('#hiddenInput').val(someVariable); 
}); 

To działa jak czar. Po kliknięciu przycisku przesyłania funkcja click() wypełnia ukrytą zmienną wejściową, a następnie cały formularz zostaje przesłany. Następnie serwer otrzymuje ukryte dane wejściowe z odświeżoną treścią.

Moje pytanie brzmi: czy to zawsze zadziała? Czy istnieje niebezpieczeństwo, że z jakiegoś powodu jeszcze mi nie wiadomo, operacja przesyłania zostanie wykonana najpierw, a funkcja click() później? Chcę się upewnić, że ukryte dane wejściowe są zawsze odświeżane.

+0

$ ("formularz"). Submit(); to obejdzie, użytkownik może wykonać połączenie ze swojej konsoli lub adresu URL. –

+0

Zakładam, że może on zostać ominięty, gdy po prostu naciskasz klawisz ENTER, aby przesłać formularz? Spróbuj. –

+2

@JamesBlond - Enter nadal będzie powodował wykonanie obsługi kliknięcia. –

Odpowiedz

4

Byłoby najlepiej, aby dołączyć aktualizację wartości bezpośrednio do formularza zgłaszania obsługi jak() zawsze należy najpierw uruchomić tego

$("#submitId").closest("form").submit(function() { 
$('#hiddenInput').val(someVariable); 
}); 
+0

To wszystko. Zdarzenie submit może być uruchamiane na różne sposoby. Zamiast próbować odgadnąć, w jaki sposób użytkownik może wysyłać zdarzenie przesyłania (kliknij? Naciśnij klawisz?), Po prostu dołącz swój przewodnik bezpośrednio do formularza przesłania. –

+0

To jednak nie zadziała, jeśli przycisk przesyłania jest osadzony w jakimś elemencie wewnątrz formularza. Chciałbym użyć '.closest (" formularz ') 'zamiast' .parent (' formularz ') '. – PeterKA

+0

@PeterKA - Tak, to jest dobra uwaga. Zmieniono "rodzica" na 'najbliższy'. –

0

The .Kliknij.

+0

Więcej komentarza niż odpowiedź. Przynajmniej podaj jakieś źródło, żeby to poprzeć. –

19

Podczas pracy z formami, to zawsze wskazane, aby pozwolić przycisk submit zrobić to zadanie: wywołać formularza SUBMIT EVENT ... to co to ma za. Następnie należy posłuchać zdarzenia submit na imprezie form, a nie click na przycisku submit.

Możesz użyć event.preventDefault(), aby uniemożliwić domyślne przesłanie formularza, abyś mógł wykonać przechowywanie domu, a następnie możesz przesłać formularz.

$("#submitId").closest('form').on('submit', function(event) { 
    event.preventDefault(); 
    $('#hiddenInput').val(someVariable); //perform some operations 
    this.submit(); //now submit the form 
}); 

Albo po prostu,

$('form').on('submit', function(event) { 
    event.preventDefault(); 
    $('#hiddenInput').val(someVariable); //perform some operations 
    this.submit(); //now submit the form 
}); 
+0

To nie działa, jeśli przycisk przesyłania używa "formaction". Polecam albo wyzwolenie przycisku wysyłania ze zdarzeniem "kliknięcie", albo przypisanie wartości "formaction" do właściwości 'action' formularza, a następnie wywołanie zdarzenia' submit'. – KevinAdu

+0

@kevinAdu co masz na myśli? Czy masz demo, aby zilustrować swoje obawy? Dziękuję Ci. – PeterKA

2

ja osobiście uważam, że bezpieczniej jest zapobiegać złożyć, a następnie ustawić wartość na wejściu potrzebne i tylko wtedy złożyć programowo formularz. Na przykład:

$("form").submit(function (e) { 
    e.preventDefault(); 
    $('#hiddenInput').val(someVariable); 
    $(this).submit(); 
}); 
Powiązane problemy