php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS Probleme mit HTML5, Bootstrap oder jQuery ?

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 20-10-2006, 16:05
Marcusson
 Registrierter Benutzer
Links : Onlinestatus : Marcusson ist offline
Registriert seit: Jan 2006
Beiträge: 241
Marcusson ist zur Zeit noch ein unbeschriebenes Blatt
Standard fehlerhafte Behandlung von <button> in IE7

Ich habe ein Problem mit dem IE 7. Für den Quellcode

Zitat:
<button type="submit" name="action" value="start">absenden</button>
Übergibt der IE 7 nicht wie erwartet den Wert action=start sondern action=absenden. In Firefox und IE 6 ging es problemlos. Aber im IE 7 macht mir das einen großen Teil der Formulare kaputt

Ist das irgendjemandem schon aufgefallen? Kennt jemand einen Hack wie man das Problem für IE 7 umgehen kann?

PS: ich muss dazu sagen, die Seite ist mit W3C-Validator geprüft und valides HTML 4.1 transitional.

Geändert von Marcusson (20-10-2006 um 16:08 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 20-10-2006, 16:37
TBT
  Moderator
Links : Onlinestatus : TBT ist offline
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 2.787
TBT befindet sich auf einem aufstrebenden Ast
TBT eine Nachricht über ICQ schicken TBT eine Nachricht über AIM schicken TBT eine Nachricht über Yahoo! schicken
Standard

Fehlerhafte Behandlung deinerseits!

Prüfe doch einfach, ob der Button gedrückt wurde, nicht welchen Wert er hat.

if( isset( $_POST['buttonname'] ) ) { ... }
__________________
TBT

Die zwei wichtigsten Regeln für eine berufliche Karriere:
1. Verrate niemals alles was du weißt!


PHP 2 AllPatrizier II Browsergame
Mit Zitat antworten
  #3 (permalink)  
Alt 20-10-2006, 16:52
Marcusson
 Registrierter Benutzer
Links : Onlinestatus : Marcusson ist offline
Registriert seit: Jan 2006
Beiträge: 241
Marcusson ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du verstehst nicht wovon ich rede!

Mach mal die folgende Seite mit dem IE7 und dem Firefox auf und vergleiche die Ergebnisse:

http://dean.edwards.name/IE7/compatibility/button.html

Dann lies dir den W3C-Standard dazu durch:

http://www.w3.org/TR/html401/interact/forms.html#h-17.5

Und du wirst sehen, dass der Firefox es richtig macht und der IE7 sich nicht standardkonform verhält. Es ist also ein Bug.

Noch ein Beispiel, wo das sehr deutlich wird:

Zitat:
<form action="index.php">
<button type="submit" name="action" value="1"><?php print $language[$i][1]; ?></button>
<button type="submit" name="action" value="2"><?php print $language[$i][2]; ?></button>
<button type="submit" name="action" value="3"><?php print $language[$i][3]; ?></button>
</form>
Ergo: je nachdem welcher Button gedrückt wird, soll das Argument action beim Abschicken des Formulars den Wert 1, 2, oder 3 haben. So wie es der HTML-Standard auch vorsieht! Nur dass der IE7 den innerText des Knotens fälschlicherweise als Value-Attribut übergibt. Und zwar sowohl in JavaScript, als auch beim Versenden des Formulars. Auf die Beschriftung der Buttons kannst du dich als Kriterium übrigens NICHT verlassen, denn der Text kann sich wie in diesem Beispiel je nachdem welche Sprache ausgewählt ist beliebig verändern.

Leider bringt es auch nichts zu prüfen, ob ein bestimmter Button geklickt worden ist. Das funktioniert in einfachen Fällen, wenn das Skript das Formular "kennt" und umgekehrt, aber das ist 1. sehr schlechter Stil und 2. für Fälle, in denen man ganz explizit den korrekten Wert aus dem Formular braucht bringt das leider auch nichts.

Im Moment habe ich nur eine JavaScript-Lösung für das Problem Das kann aber keine sinnvolle Dauerlösung sein.

Geändert von Marcusson (20-10-2006 um 17:03 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 23-10-2006, 09:33
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Das war aber beim IE < 7 bisher auch nicht viel anders.
Button und IE vertrugen sich noch nie, und daran scheint sich auch zukünftig nichts zu ändern.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #5 (permalink)  
Alt 23-10-2006, 09:52
ArSeN
 Registrierter Benutzer
Links : Onlinestatus : ArSeN ist offline
Registriert seit: Feb 2006
Ort: Berlin
Beiträge: 1.052
ArSeN ist zur Zeit noch ein unbeschriebenes Blatt
ArSeN eine Nachricht über ICQ schicken ArSeN eine Nachricht über AIM schicken ArSeN eine Nachricht über Yahoo! schicken
Standard

Ich hab grad ma bei SelfHTML geguckt, da is ein Beispiel, das bei mir im IE 6 auch funzt. Und dort steht es würde schon ab IE 4 gehn.
__________________
Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.
Mit Zitat antworten
  #6 (permalink)  
Alt 23-10-2006, 10:01
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von ArSeN
Ich hab grad ma bei SelfHTML geguckt, da is ein Beispiel, das bei mir im IE 6 auch funzt.
Nur von der Optik her - oder auch von der Übergabe der Daten an den Server ...?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #7 (permalink)  
Alt 23-10-2006, 12:57
Marcusson
 Registrierter Benutzer
Links : Onlinestatus : Marcusson ist offline
Registriert seit: Jan 2006
Beiträge: 241
Marcusson ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also mit IE 6 hatte ich diese Probleme bisher nicht - oder sie sind mir nur niemals aufgefallen, weil ich selbst mit Firefox surfe und den IE höchstens mal zum Testen benutze.

Wie auch immer: ich habe jedenfalls jetzt selbst eine Lösung erarbeitet.

Code:
function ie7fix()
{
    if (navigator.appName == "Microsoft Internet Explorer") {
        var buttons = document.getElementsByTagName('button');
        for (var i=0; i < buttons.length; i++)
        {
            var button = buttons.item(i);
            if (button.type == 'submit') {
                var o = button.attributes.getNamedItem('value');
                if (o && o.value) {
                    button.onclick = function() { this.value = o.value;};
                }
            }
        }
    }
}
Damit funktioniert's im IE7. Leider nur mit JavaScript, aber besser als gar nichts. Das hat den großen Vorteil, dass ich meine paar Hundert Formulare nicht alle auf den Bug kontrollieren und mühsam Workarounds basteln muss, sondern es genügt diese Funktion zentral einzubinden und aus die Maus.

Ich werde das in den nächsten Stability-Release meines Frameworks mit einbauen: http://all-community.de/pub.

Damit kann ich dann alle älteren Versionen ohne Eingriff in den Code oder die Templates auf einmal patchen.

Ansonsten gibt's natürlich noch den hervorragenden Bugfix von Dean Edwards auf http://dean.edwards.name/IE7/, der noch einige weitere, IMHO nicht ganz so kritische, IE7-Bugs korrigiert.
Mit Zitat antworten
  #8 (permalink)  
Alt 23-10-2006, 14:15
TBT
  Moderator
Links : Onlinestatus : TBT ist offline
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 2.787
TBT befindet sich auf einem aufstrebenden Ast
TBT eine Nachricht über ICQ schicken TBT eine Nachricht über AIM schicken TBT eine Nachricht über Yahoo! schicken
Standard

Zitat:
Damit funktioniert's im IE7. Leider nur mit JavaScript, aber besser als gar nichts. Das hat den großen Vorteil, dass ich meine paar Hundert Formulare nicht alle auf den Bug kontrollieren und mühsam Workarounds basteln muss, sondern es genügt diese Funktion zentral einzubinden und aus die Maus.
und wenn du die Beschriftung der Button änderst, kannst auch den kompletten PHP Code nach deinem "Bug" durchsuchen. Alle deine Bedingungen hauen dann nicht mehr hin.
__________________
TBT

Die zwei wichtigsten Regeln für eine berufliche Karriere:
1. Verrate niemals alles was du weißt!


PHP 2 AllPatrizier II Browsergame
Mit Zitat antworten
  #9 (permalink)  
Alt 23-10-2006, 15:53
Marcusson
 Registrierter Benutzer
Links : Onlinestatus : Marcusson ist offline
Registriert seit: Jan 2006
Beiträge: 241
Marcusson ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Der Fix hat mit der Beschriftung der Buttons und dem PHP-Code gar nichts zu tun. Er ersetzt lediglich für alle button[type=submit] den Wert des Objekts button.value durch den korrekten Wert button/@value aus dem Parserbaum des Dokuments. Das bewirkt in einem Browser der gemäß W3C-Standard arbeitet absolut gar nichts, weil nach W3C beide Werte identisch sein sollten. (sollte sich z.Bsp. Opera als IE ausgeben und den Block ausführen schadet es nichts) Es behebt allerdings das Problem im IE7, weil dort der Wert button.value falsch ist, der Wert im Parserbaum jedoch korrekt abgelegt wird.

Wenn der IE-Nutzer JavaScript natürlich deaktiviert hat, dann hat er 'nen Zonk und bekommt nur in dem speziellen Fall, dass er ausgerechnet ein solches Formular erwischt, dass der IE fehlerhaft verarbeitet, eine entsprechende Fehlermeldung ("Action 'foo' is undefined") mit einer Beschreibung dazu. Aber ich denke das kann man gerade noch verkraften, zumal JavaScript im IE per Default aktiviert ist und alle anderen Browser von dem Bug im IE nicht betroffen sind. Firefox-Nutzern zum Beispiel kann das alles herzlich egal sein
Mit Zitat antworten
  #10 (permalink)  
Alt 23-10-2006, 16:06
TBT
  Moderator
Links : Onlinestatus : TBT ist offline
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 2.787
TBT befindet sich auf einem aufstrebenden Ast
TBT eine Nachricht über ICQ schicken TBT eine Nachricht über AIM schicken TBT eine Nachricht über Yahoo! schicken
Standard

Was passiert wenn du die Beschriftung des Buttons änderst?
Das ist doch der value Wert
__________________
TBT

Die zwei wichtigsten Regeln für eine berufliche Karriere:
1. Verrate niemals alles was du weißt!


PHP 2 AllPatrizier II Browsergame
Mit Zitat antworten
  #11 (permalink)  
Alt 23-10-2006, 17:00
Marcusson
 Registrierter Benutzer
Links : Onlinestatus : Marcusson ist offline
Registriert seit: Jan 2006
Beiträge: 241
Marcusson ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nope. Der Tag "Button" hat ein Attribut "value", welches - wie der Name schon sagt - den Wert angibt. Die Beschriftung entspricht button.innerHTML, also eben NICHT button.value. Genau darin besteht die fehlerhafte Behandlung im IE.

Falls du das bisher anders gehandhabt hast und der IE-Logik gefolgt bist, dann werden deine Seiten in standardkonformen Browsern, wie Firefox oder Opera, möglicherweise nicht funktionieren.

Lies doch einfach in der W3C-Spezifikation des Button-Elements nach. Da ist es doch eindeutig beschrieben - sogar mit einem Beispiel dazu

Geändert von Marcusson (23-10-2006 um 17:03 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 24-10-2006, 08:20
BLG
 Newbie
Links : Onlinestatus : BLG ist offline
Registriert seit: Aug 2006
Ort: Dresden
Beiträge: 39
BLG ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Marcusson
Leider bringt es auch nichts zu prüfen, ob ein bestimmter Button geklickt worden ist. Das funktioniert in einfachen Fällen, wenn das Skript das Formular "kennt" und umgekehrt, aber das ist 1. sehr schlechter Stil und 2. für Fälle, in denen man ganz explizit den korrekten Wert aus dem Formular braucht bringt das leider auch nichts.
Also ich muss sagen das ich noch nie den Fall hatte, das mich das Value-Attribut eines Buttons interressiert, entweder der Button wurde gedrückt oder nicht. Da du dieses Attribut ja eh statisch setzt (in deinem Template) kannst du diesen Teil doch auch auf deinen Server auslagern (oder du benutzt ein verstecktes Feld).

Meine Formulare funktionieren auch ohne diesen Wert und wenn ich ehrlich bin finde ich es eher einen schlechten Stil wenn man den Wert eines Button verwendet!

MFG
BLG

PS: Das Formular kennt das Serverscript??? WTF
Mit Zitat antworten
  #13 (permalink)  
Alt 24-10-2006, 09:28
Marcusson
 Registrierter Benutzer
Links : Onlinestatus : Marcusson ist offline
Registriert seit: Jan 2006
Beiträge: 241
Marcusson ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das ist Blödsinn. Die Semantik des Button-Tags ist durch das W3C eindeutig und unmißverständlich festgelegt. Wie kann eine standardkonforme, vom W3C empfohlene Umsetzung also schlechter Stil sein? Was wäre dann "guter Stil"? Webseiten nach den Bugs in Microsoft's Browser zu entwerfen?

Wie dem auch sei: Die Templates sind in meinem Fall Skins, die Hinz und Kunz nach eigener Lust und Laune anpassen können. Und die haben von diesem IE-Bug vielleicht noch nie etwas gehört. Ergo werden diese Leute erwarten, dass sich Formulare standardkonform verhalten und genau das werde ich gewährleisten. Nicht mehr und nicht weniger.
Mit Zitat antworten
  #14 (permalink)  
Alt 24-10-2006, 09:45
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@topicstarter
Kennst du einen Browser, der sich gänzlich an die W3 Spez hält ? imho gibt es das schlicht und ergreifend nicht. Damit musst du als Webdesigner leben und wenn du Seiten so entwickelst, dass nur 100% konforme Browser das korrekt umsetzen, dann knallst du eh immer wieder mal an ne Wand. Es gibt Dinge die der IE korrekt macht und der FF nicht. Gleiches gilt für andere Browser.
Klar es ist nicht gut wenn sich Browser nicht an die Vorgaben halten. Aber ändern kannst du daran nicht viel.

Gruss

tobi
__________________
Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #15 (permalink)  
Alt 24-10-2006, 09:54
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Nicht Äpfel mit Birnen vergleichen.

Wenn irgendein Browser irgendwas um ein paar Pixel verschoben anzeigt oder sonstwas optisch verkehrt macht - das braucht einen nicht sonderlich zu kratzen.

Aber hier geht's um (Formular-)Datenübergabe, und dabei ist es für die serverseitige Logik eben doch oft entscheidend, dass eine bestimmte Struktur eingehalten wird.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:38 Uhr.