Toon posts:

[safari] lege textarea wordt niet gereset

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mensen,

Ik loop tegen het volgende probleem aan en ik vraag me af of ik iets heel simpels over het hoofd zie, of dat Safari hier gek doet.

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <title>Form test</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    </head>
    <body>
        <div id="wrapper">
            <form name="form1" id="form1" action="blabla.php" method="post">
                <p>
                    <input type="text" name="inputtext1" id="inputtext" size="15">
                </p>
                <div>
                    <textarea name="textarea1" id="textarea1" rows="8" cols="40"></textarea>
                </div>
                <p>
                    <input type="reset" name="inputreset" value="Reset" id="inputreset">
                    <input type="submit" name="inputsubmit" value="Submit" id="inputsubmit">
                </p>
            </form>
        </div>
    </body>
</html>


Ik tik wat in het input-text-veld en wat in de textarea, druk dan op Reset, en dan wordt het input-text-veld weer leeg, terwijl de tekst in de textarea blijft staan.

In Firefox wordt de textarea wel gewist.

Het probleem zit hem er misschien in, dat de textarea volgens Safari geen initial value heeft, en dan geldt:
The control's "current value" is first set to the initial value. Thereafter, the control's current value may be modified through user interaction and scripts.

A control's initial value does not change. Thus, when a form is reset, each control's current value is reset to its initial value. If a control does not have an initial value, the effect of a form reset on that control is undefined.
Als ik een spatie zet tussen de open- en sluittag van de textarea, dan komt die spatie inderdaad terug na een reset van het formulier.

Ik vind dat het helemaal niet zo vreemd is dat een textarea leeg is en dat "leeg" (dus: "") hier best mag gelden als initial value.

Ik moet zeggen dat dit mij nog nooit is opgevallen en dat een paar Google searches geen andere meldigen van dit gedrag opleveren. Ik werk met een Developer's preview van Safari 4, dus misschien zit het daarin. Maar in de live omgeving van mijn tool (dat was niet deze uitgeklede versie) had een collega met Safari 3 hetzelfde. We werken op de Mac.

Dit is simpel op te lossen met js, maar het gaat me even om het default gedrag. Ligt het nu aan mijn Safari 4, is dit toch op de een of andere manier logisch, hoe zit dit volgens jullie?


Edit:
Oké, de laatste nightly van Webkit doet dit niet, dus het heeft wel met Safari 4 te maken. Ik zie denk ik al dat er in de live omgeving een ander probleem is. Misschien kom ik daar dadelijk nog op terug. Over dit specifieke voorbeeld hoeven jullie je niet te buigen. Excuus!

[ Voor 5% gewijzigd door Verwijderd op 18-02-2009 21:04 ]


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 18:21

Sebazzz

3dp

Undefined, het is dus wat de browser maker denkt dat goed is.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ben ik weer. |:(

Ik ben mijn uitgeklede versie terug aan het bouwen naar de live omgeving.

Na het verzenden van het formulier komt er een bevestigingspagina, vanwaar je kunt kiezen of je nog een formulier in wil voeren, of naar een andere pagina wil.

Er is gekozen om terug te gaan naar het formulier dmv history.back(). Dit om het vanuit het formulier weer mogelijk te maken om met de back-knop van de browser terug te keren naar het hoofdmenu.

Ik controleer met de http-headers de cache van de browser.
PHP:
1
2
3
4
5
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); // HTTP/1.1
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache"); // HTTP/1.0


Dit werkt naar behoren in FF. Safari echter, behoudt de ingevulde gegevens in de back-forward cache. Volgens http://developer.apple.com/internet/safari/faq.html#anchor5 moet je ook nog eens een iframe in de pagina zetten om deze cache te legen. Dit werkt bij mij niet.

Daarom heb ik het volgende toegevoegd:
JavaScript:
1
2
3
        window.onload = function(){
            document.getElementById('form1').reset();
        }


(Hier blijkt de waarde van het iframe: zonder dat ding firet window.onload niet.)

Bij deze javascript-reset krijg ik weer het gedrag zoals in de TS beschreven: het hele form wordt gereset, behalve de textarea. Daarvoor is weer een aparte js-oplossing nodig. 7(8)7

Dit begint een beetje een bug report te worden, wat hier niet thuis hoort. Ik hoop maar dat anderen hier nog iets aan hebben.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sebazzz schreef op woensdag 18 februari 2009 @ 21:33:
Undefined, het is dus wat de browser maker denkt dat goed is.
Klopt, maar de browsermaker doet m.i. iets heel geks.

Stap 1:
Ik vul het form in en druk submit. Volgende pagina wordt geopend.

Stap 2:
Ik klik op een link met history.back(). Ik ga terug naar de pagina met het form.

Stap 3:
Dank zij het iframe wordt window.onload gefired. Als gevolg daarvan wordt het form gereset. De textarea houdt de waarde van Stap1.

Stap 3a:
Een druk op de Reset-knop laat ook de waarde van Stap 1 staan.

Stap 3b:
Als ik nu in de Web Inspector van Safari kijk, heeft de textarea een innerHTML gelijk aan de waarde van Stap 1. View source laat zien dat de textarea leeg is.

Stap 4:
Ik tik wat extra tekst in de textarea.

Stap 5:
Ik druk op reset, en rara, wat komt er terug? – De waarde van Stap 1.