2009-11-10 17 views
20

OK, to mniej pytanie niż tylko moje informacje (ponieważ mogę wymyślić około 4 różnych worków, które sprawią, że zadziała, ale mam formularz (nic zbyt specjalnego), ale złożyć przycisk ma konkretną wartość z nim związane.Javascript Submit nie zawiera przycisku Submit Wartość

<input type='submit' name='submitDocUpdate' value='Save'/> 

a gdy formularz zostanie złożony sprawdzić dla tej nazwy.

if(isset($_POST['submitDocUpdate'])){ //do stuff 

jednak istnieje jeden raz, kiedy” m próbuje przesłać formularz przez JavaScript, a nie przycisk przesyłania.

document.getElementById("myForm").submit(); 

Co działa poprawnie, z wyjątkiem 1 problemu. Kiedy patrzę na wartości $ _POST, które są przesyłane za pomocą metody javascript, nie uwzględnia ona metody submitDocUpdate. Otrzymuję wszystkie inne wartości formularza, ale nie wartość przycisku wysyłania.

Tak jak powiedziałem, mogę wymyślić kilka sposobów obejścia tego problemu (przy użyciu ukrytej zmiennej, sprawdzić isset na innej zmiennej formularza itp.), Ale zastanawiam się, czy to jest prawidłowe zachowanie funkcji submit() ponieważ wydaje mi się mniej intuicyjny. Z góry dziękuję.

Odpowiedz

26

Tak, to jest poprawne zachowanie HTMLFormElement.submit()

Powodem swoje przedstawienia wartość przycisk nie zostanie wysłana dlatego formularze HTML są zaprojektowane tak, aby wysłać ich wartość przycisk przesyłania, który został kliknięty (lub w inny sposób aktywowany). Pozwala to na wiele przycisków przesyłania w jednym formularzu, na przykład scenariusz, w którym chcesz wykonać zarówno "Podgląd", jak i akcję "Zapisz".

Ponieważ programujesz formularz, nie ma wyraźnej akcji użytkownika dla pojedynczego przycisku przesyłania, więc nic nie jest wysyłane.

+0

Ah. To ma wiele sensu. Nie rozważałem koncepcji programowego przesyłania za pomocą wielu przycisków przesyłania (nie używam wielu bardzo często). Dzięki, że;) –

+0

denerwujące. Używam '$ form.on ('submit', function() {});' które jest wyzwalane po przesłaniu formularza (przycisk jest kliknięty), ale nawet to wydaje się przesłonić, pozwalając przyciskowi przejść. Próbowałem użyć onsubmit, ponieważ onclick uniemożliwił przesłanie formularza, gdy chcę tylko zmienić stronę, aby wyłączyć klikanie przycisków, ale wydaje się, że ... wyłącza przyciski ... przed przesłaniem zamiast po ... dzięki za wyjaśnienie! – Jake

7

Dlaczego zamiast tego użyć poniższych?

<input type="hidden" name="submitDocUpdate" value="Save" /> 
+0

@Tim Cooper - Co zrobić, jeśli w formularzu jest wiele przycisków? – MarcoZen

1

Wartość przycisku przesyłania jest przesyłana, gdy użytkownik kliknie przycisk. Wywołanie metody form.submit() nie powoduje kliknięcia przycisku. Możesz mieć wiele przycisków przesyłania, a funkcja form.submit() nie ma możliwości sprawdzenia, który z nich chcesz wysłać na serwer.

9

Korzystanie wersję jQuery 1.0 lub większym:

$('input[type="submit"]').click();

I rzeczywiście pracował przez tego samego problemu, kiedy natknąłem się na to stanowisko. click() bez żadnych argumentów wywołuje zdarzenie click na elementach, które wybierzesz: http://api.jquery.com/click/

+0

Bardzo interesująca wskazówka. Dzięki. –

1

Mimo że przyjęta odpowiedź jest technicznie prawidłowa. Istnieje sposób na przeniesienie wartości, którą chcesz przypisać. W rzeczywistości, gdy wartość jest wysyłana do serwera, wartość przycisku przesyłania jest powiązana z nazwą nadaną przez przycisk przesyłania. Tak działa sztuczka Marcin i istnieje wiele sposobów na osiągnięcie tego, w zależności od tego, czego używasz. Dawny.w jQuery można przekazać

data: { 
    submitDocUpdate = "MyValue" 
} 

w MVC użyłbym:

@using (Html.BeginForm("ExternalLogin", "Account", new { submitDocUpdate = "MyValue" })) 

To jest rzeczywiście jak ja spełniony wymóg parowej korzystania thier własnego wizerunku jako odnośnik logowania za pomocą OAuth:

@using (Html.BeginForm("ExternalLogin", "Account", new { provider = "Steam" }, FormMethod.Post, new { id = "steamLogin" })) 
{ 
    <a id="loginLink" class="steam-login-button" href="javascript:document.getElementById('steamLogin').submit()"><img alt="Sign in through Steam" src="https://steamcommunity-a.akamaihd.net/public/images/signinthroughsteam/sits_01.png"/></a> 
} 
Powiązane problemy