Safari 10中的新输入占位符行为 - 不再通过JavaScript隐藏更改

时间:2016-09-21 19:20:32

标签: javascript html safari macos-sierra

macOS Sierra中的Safari 10.0似乎改变了输入中的占位符通过JavaScript更改输入值时的行为方式。它现在也与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 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

Safari技术预览版本37(Safari 11.1,WebKit 12605.1.2)以及常规Safari版本11.0.3(WebKit 13604.5.6)已解决此问题。

答案 2 :(得分:0)

根据this Apple thread(并由我的一位同事证实),如果您打开了Javascript控制台,这只是一个问题。所以,您可能不需要担心解决方法!

答案 3 :(得分: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()
        }
    })  
}