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技术预览版。
答案 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()
}
})
}