21

当通过 JavaScript 更改输入值时,macOS Sierra 中的 Safari 10.0 似乎改变了输入中占位符的行为方式。它现在也不同于 Chrome (53.0.2785.116) 正在做的事情。

到目前为止,当通过 JavaScript 设置输入值时,占位符会消失。通过 JavaScript 将值设置回空后,占位符将重新出现。

现在,通过 JavaScript 设置输入值不会隐藏占位符,直到输入获得焦点之后(例如通过单击)。

检查此 JS Bin 以获取演示:https ://jsbin.com/rogoludahu/edit?html,js,output

这是预期的行为吗?如果是这样,是否有一个聪明的解决方法可以在通过 JavaScript 更改后隐藏/取消隐藏占位符?

编辑:现在已在 rdar://28412751 提交 Safari 10 和 Safari 技术预览版。

4

4 回答 4

5

我今天早些时候遇到了这个问题。据我所见,没有好的解决方案。我的 hacky 解决方法是调用.focus(),然后.blur()在元素被赋予值后立即调用它。

于 2017-03-29T21:26:54.933 回答
2

这已在 Safari Technology Preview Release 37(Safari 11.1、WebKit 12605.1.2)以及常规 Safari 版本 11.0.3(WebKit 13604.5.6)中得到解决。

于 2017-08-19T10:38:29.910 回答
0

根据这个 Apple 线程(并由我的一位同事确认),如果您打开了 Javascript 控制台,这只是一个问题。因此,您可能无需担心解决方法!

于 2017-09-27T01:14:49.017 回答
0

我不知道该错误是否返回或从未正确修复(Safari 11.0.3)。可以使用 Joshua 的 jsbin 重现。我们的解决方案是重新绘制变化领域。我们正在使用 ExtJS,所以这是一个字段覆盖的片段,但应该能够将它应用到任何其他框架或 vanila 中。

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()
        }
    })  
}
于 2018-03-14T09:52:50.407 回答