Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dwie różne akcje w jednym formularzu
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Flake
Witam,

mam takie pytanie - czy istnieje możliwość wywołania opcji SUBMIT za pomocą JavaScript ale z inną wartością ACTION niż jest podana w formularzu?

Przyklad:

  1. <form method="post" action="akcja.php" id="formularz">
  2. <input type="text">
  3. <input type="submit">
  4. </form>
  5.  
  6. <input type="button" onclick="wyslij()">


kliknięcie submit wywola akcja.php a klikniecie buttona wywoła funkcje:

[JAVASCRIPT] pobierz, plaintext
  1. function wyslij(){
  2. Form = document.getElementById('formularz');
  3. Form.submit();
  4. }
[JAVASCRIPT] pobierz, plaintext


które też spowoduje użycie akcja.php

a czy da się zrobić tak żeby normalny SUBMIT wykonywał action.php a button np jakasinnaakcja.php?
flashdev
Kod
// JavaScript
var idButtona = "...";
document.getElementsById(idButtona).onClick = function(){
document.getElementsById('formularz').action = 'jakasinnaakcja.php';
document.getElementsById('formularz').submit();
}


To powinno pomóc.
Flake
ok, dzieki smile.gif


a jest np możliwość żeby submit wysyłał wartość? Mam w formularzu np 3 submity:

  1. <form method="post" action="akcja.php" id="formularz">
  2. <input name="wartosc" type="hidden" value="1">
  3. <input value="Wyslij 1" type="submit">
  4. ----------
  5. <input name="wartosc" type="hidden" value="2">
  6. <input value="Wyslij 2" type="submit">
  7. ----------
  8. <input name="wartosc" type="hidden" value="3">
  9. <input value="Wyslij 3" type="submit">
  10. </form>


to wszystko jest w tabelce podzielone na wiersze hidden - submit

Teraz pytanie - czy da sie zrobić tak, że do akcja.php trafi wartosc tylko z tego submita ktorego klikne? W tym wypadku dostaje wartosc zawsze ostatniego hiddena (czyli 3) a potrzebuje żeby skrypt w akcja.php wiedzial z ktorego buttona przyszla wiadomosc - wszystko musi byc w jednym formularzu.
#luq
Przed wywołaniem zdarzenia submit, ustaw atrybut disable dla pozostałych submitów.

@edit
Eh... widzę, że @Flake sobie już poradził i edytował swój post smile.gif
Flake
Nie, poprostu chciałem przenieść ten problem do nowego tematu - ale jak zobaczyłem, że jest odpowiedź to wróciłem tutaj ^^
flashdev
Cytat(Flake @ 16.07.2010, 14:54:53 ) *
ok, dzieki smile.gif


a jest np możliwość żeby submit wysyłał wartość? Mam w formularzu np 3 submity:

[...]


Przypisz każdemu submitowi parametr name.
Po stronie serwera będziesz mógł stwierdzić, który został kliknięty, oraz którą wartość użyć.
Flake
jak do submitow przypisze name to jak później odczytać który został kliknięty?

mam (guziczki są tworzone dynamicznie w JavaScript wiec zmienia sie cyferka w name histButt0, 1, 2...)

  1. <input type="submit" value="historia" name="histButt0" class="historia">


i jak odczytać teraz że to ten guzik był kliknięty?

  1. $wartos = $_POST['histButt0'];
  2. echo $wartosc;


nie zwraca nic

Najlepiej jakby zwracał liczby bo wtedy moge to podpiąć pod MySQL.

-----

Z ustawieniem 'DISABLED' też próbowałem ale nie wiem jak ustawić wszystkie guziki poza tym który jest klikany.
#luq
Wytłumacz jeszcze raz co chcesz osiągnąć.

Klikasz na "Wyslij 3" i chcesz mieć tylko
Kod
$_POST = array(
    'wartosc' = 3
);

Tak?
Flake
dokladnie tak smile.gif

Cały formularz tworzony jest w JavaScript więc tych elementów może być 3 a może być 10

Chodzi o to, że mam liste np 10 produktów i przy każdym z nich chce dodać guziczek 'historia' który pokaże mi historię sprzedaży danego produktu. Więc otrzymanie liczby z submita byłoby bardzo pomocne w zapytaniu MySQLowym smile.gif
#luq
Za bardzo sobie utrudniasz sprawę.

Dlaczego nie stworzysz osobnych formularzy do osobnych sumbitów, przecież i tak to idzie pod różne akcje (btw. dlaczego idzie pod inne akcję)?
Dlaczego nie zmienisz metody przesyłania formularza na GETa?

Ogólnie to tak jak pisałem, jeśli jakiś input ma ustawiony atrybut disabled="disabled" to po stronie serwera tego pola nie ma...
  1. <form action="action.php" method="post">
  2. <input type="text" name="foo" />
  3. <input type="text" name="bar" value="cos tam" disabled="disabled" />
  4.  
  5. <input type="submit" name="go" value="Go" />
  6. </form>


action.php
  1. <?php
  2. echo '<pre>';
  3. print_r( $_POST );
  4. echo '</pre>';
  5. ?>


i to da:
Kod
Array
(
    [foo] =>
    [go] => Go
)


Ale po co to w ten sposób rozwiązywać jak można inaczej i będzie na pierwszy rzut oka widać jak to działa. Odpowiedz sobie na te 2 pytania postawione przeze mnie.
Flake
Dwie akcje bo jedna wystawia fakture biggrin.gif a 2ga wyświetla tylko historie - niestety cały system jest już napisany - ja mam wprowadzić tylko poprawki - wiadomo, że łatwiej byłoby napisać od nowa no ale 'nie da się'

Z tego co czytam na necie (a teraz w Twoim poscie) to w momencie jakbym zrobił:

  1. <input type="submit" name="wartosc" value="1" />


to powinienem w $_POST[] mieć wartość => 1 - niestety jak wyświetlam $_POST[] to nie mam w ogóle klucza 'wartosc' co dziwne bo cała reszta z formularza się ładnie pojawia w $_POST
#luq
Cytat(Flake @ 19.07.2010, 14:42:32 ) *
niestety cały system jest już napisany - ja mam wprowadzić tylko poprawki

Rozumiem.

Więc zrób to tak:

Jeśli klikasz na drugi sumbit to wywoływana jest funkcja w JSie modyfikująca drzewko DOM do postaci:
  1. <form action="action.php" method="post">
  2. <input type="text" name="foo" value="1" disabled="disabled" />
  3. <input type="submit" name="go" value="Go" disabled="disabled" />
  4.  
  5. <input type="text" name="foo" value="2" />
  6. <input type="submit" name="go" value="Go" />
  7. </form>

a potem jest zdarzenie submit

Jeśli jest kliknięty pierwszy sumbit to
  1. <form action="action.php" method="post">
  2. <input type="text" name="foo" value="1" />
  3. <input type="submit" name="go" value="Go />
  4.  
  5. <input type="text" name="foo" value="2" disabled="disabled" />
  6. <input type="submit" name="go" value="Go" disabled="disabled" />
  7. </form>

etc.
Flake
A można by zrobić tak?

dodać do tego hiddeny z disabled="disabled"
i do funkcji submita dodać coś w rodzaju:

form.elements[this+1].disabled=false; (wiem że to this+1 nie dziala - ale chodzi mi o ogólny pomysł)

?

w sensie żeby tuż przed wysłaniem formularza zmienić atrybut następnego po submicie elementu na disabled="" ? wtedy tylko hidden zaraz za submitem nie bedzie disabled i będzie mógł wysyłać liczby w wartości

Tylko jak zrobić to this + 1 ? smile.gif
#luq
Jeśli miałbyś tak:

  1. <input type="submit" name="wartosc" value="1" />
  2. <input type="submit" name="wartosc" value="2" />
  3. <input type="submit" name="wartosc" value="3" />


to w jQuery zrobiłbyś coś w ten deseń

Kod
$('#id_formularza submit').click(function(){
    $(this).parent().filter( 'input[type=submit]' ).attr( 'disabled', 'disabled' );
    $(this).removeAttr( 'disabled', 'disabled' );
    $(this).parent().attr( 'action', 'foo.php' ); // zmiana akcji formularza

    $(this).submit();
});


Powinno działać, nie sprawdzałem.
Flake
Witam,

wielkie dzięki za pomoc smile.gif rozwiązałem to w taki sposób:

  1. <input type="submit" value="Hist" onclick="hist(this)"><input type="hidden" value="0" disabled="disabled">
  2. <input type="submit" value="Hist" onclick="hist(this)"><input type="hidden" value="1" disabled="disabled">
  3. ...
  4. <input type="submit" value="Hist" onclick="hist(this)"><input type="hidden" value="n" disabled="disabled">


[JAVASCRIPT] pobierz, plaintext
  1.  
  2. function hist(par){
  3. ...
  4. par.parentNode.lastChild.disabled = false;
  5. ...
  6. formularz.submit();
  7. ...
  8. par.parentNode.lastChild.disabled = true;
  9. }
[JAVASCRIPT] pobierz, plaintext
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.