[XHTML/PHP] Dwa przyciski submit - problem w IE6

0

Dzień dobry,
natrafiłem ostatnio na dość nieciekawy błąd w IE6 i nie mogę sobie z nim poradzić. Mianowicie, mam formularz który ma dwa przyciski typu submit: "Modyfikuj" i "Zamawiam". Wysyłam formularz do skryptu PHP i... działa super w Operze, FF, IE7, natomiast w IE6 się wysypuje. Dlaczego? Odkryłem przyczynę, ale nie wiem jak obejść błąd.
Mianowicie, prawidłowe wsyłanie danych (takie jak np. w Operze) polega na wysłaniu nazwy (przez POST) przycisku który kliknięto, natomiast nie wysyłaniu nazwy przycisku który nie został kliknięty.
Dzięki temu można sprawdzić który przycisk został kliknięty stosując funkcję isset($_POST['nazwa_przycisku']).
Problem jest w tym, że Internet Explorer 6 wysyła przez POST zarówno nazwę przycisku klikniętego, jak i tego który nie został kliknięty i w efekcie nie mogę w skrypcie określić który przycisk kliknięto.
Dodam, że korzystam ze znacznika BUTTON (przyciski są graficzne).

<button type="submit" name="Przycisk1"></button>
<button type="submit" name="Przycisk2"></button>

Zwykły kod:

<input type="submit" name="Przycisk1" value="Przycisk1" />
<input type="submit" name="Przycisk2" value="Przycisk2" />

...działa poprawnie we wszystkich przeglądarkach (nawet w IE6).
Bardzo proszę o radę jak sobie z tym poradzić.

0

Szczęśliwie znalazłem odpowiedź na swoje pytanie. Rzeczywiście jest to bug w IE6. Podaje sposób na ominięcie go (niestety JavaScript):


  // Poprawka dla IE 6
  function buttonfix() {
    var buttons = document.getElementsByTagName("button");
    for (var i=0; i<buttons.length; i++) {
        if(buttons[i].onclick) continue;
        
        buttons[i].onclick = function () {
            for(j=0; j<this.form.elements.length; j++)
                if( this.form.elements[j].tagName == "BUTTON" )
                    this.form.elements[j].disabled = true;
            this.disabled=false;
            this.value = this.attributes.getNamedItem("value").nodeValue ;
        }
    }
  }
  window.attachEvent("onload", buttonfix);	

Workaround pochodzi stąd: http://www.kopz.org/public/documents/css/multiple_buttons_ie_workaround.html
(oryginał tutaj: http://www.codecomments.com/JavaScript/message756646.html)

Wystarczy wkleić ów skrypt i wszystko rusza również pod IE6 (niestety musi być u Internauty włączona obsługa JavaScript).

0

Chyba (o ile dobrze kojarzę) to Internet Explorer wysyła zawartość znacznika <button>, natomiast inne przeglądarki wysyłają wartość atrybutu value dla tego elementu. Możesz przypisać im (dwóm przyciskom) takie same nazwy (name) i inne wartości i w ten sposób rozpoznawać który został wciśnięty.

A poza tym to chyba <button> nie powinno się stosować w formularzu, na rzecz <input>.

Oczywiście wersja z JS jest w miarę dobra, mało który użytkownik IE6 ma wyłączone JS... ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1