it-swarm.com.de

Neues Verhalten bei Eingabeplatzhaltern in Safari 10 - verbirgt sich bei Änderungen über JavaScript nicht mehr

Safari 10.0 in macOS Sierra scheint das Verhalten des Platzhalters in einer Eingabe verändert zu haben, wenn der Eingabewert über JavaScript geändert wird. Es unterscheidet sich jetzt auch von Chrome (53.0.2785.116).

Bis jetzt, Wenn Sie einen Eingabewert über JavaScript setzen, verschwindet der Platzhalter. Nachdem Sie den Wert per JavaScript auf leer gesetzt haben, wird der Platzhalter wieder angezeigt.

Nun, Wenn Sie den Eingabewert über JavaScript festlegen, wird der Platzhalter nicht ausgeblendet, bis die Eingabe danach den Fokus erhält (z. B. durch Anklicken). 

In dieser JS-Bin finden Sie eine Demo: https://jsbin.com/rogoludahu/edit?html,js,output

Ist das das beabsichtigte Verhalten? Wenn ja, gibt es eine clevere Lösung, um den Platzhalter nach einer Änderung über JavaScript ein-/auszublenden? 

Bearbeiten: Dies wurde jetzt bei rdar: // 28412751 für Safari 10 und die Safari Technology Preview eingereicht.

21
Joshua

Dies wurde in Safari Technology Preview Release 37 (Safari 11.1, WebKit 12605.1.2) sowie in der regulären Safari Version 11.0.3 (WebKit 13604.5.6) behoben.

2
Joshua

Ich bin heute früher auf dieses Problem gestoßen. Soweit ich gesehen habe, gibt es keine gute Lösung. Meine gehackte Problemumgehung bestand darin, .focus() und dann .blur() für das Element aufzurufen, sobald der Wert angegeben wurde.

5
JustAProgrammer

Laut diesem Apple-Thread (und von einem meiner Kollegen bestätigt) ist dies nur ein Problem, wenn Sie die Javascript-Konsole geöffnet haben. Sie müssen sich also wahrscheinlich keine Sorgen um einen Workaround machen!

0
Ben Kuhn

Ich weiß nicht, ob der Fehler zurückgegeben wurde oder nie richtig behoben wurde (Safari 11.0.3). Kann mit dem Jsbin von Joshua reproduziert werden. Die Lösung für uns bestand darin, das Feld bei Änderungen neu zu zeichnen. Wir verwenden ExtJS, dies ist also ein Ausschnitt für die Außerkraftsetzung des Feldes, sollte aber in der Lage sein, es in jedem anderen Framework oder Vanila anzuwenden.

if(Ext.isSafari && !Ext.isEmpty(me.emptyText)) {
    me.on('change', function() {
        var me = this;

        if(me.rendered && me.el && Ext.isFunction(me.el.redraw)) {
            me.el.redraw()
        }
    })  
}
0
Tomi Močnik