美文网首页
placeholder

placeholder

作者: 纳兰禛祎 | 来源:发表于2017-11-06 16:33 被阅读0次

问题:
placeholder在火狐, 谷歌与在IE11(windows7版本的IE11)表现形式有差异, 具体表现为在IE11上点击输入框placeholder的提示信息会消失, 而在火狐和谷歌上不会消失. 怎么做才能统一浏览器的表新形式(获取焦点不消失--IE/获取焦点消失).

需求一:
input输入框获取焦点后文字提示信息依然存在, 在输入数据时提示信息消失, 要求IE11+Chrome+Firefox(48以上)表现一致.

需求二:
input输入框获取焦点后文字提示信息消失. 要求同上.

实现:
(需求二在网上有很多实现, 在此省略, 这里主要讨论需求一)

解决办法:
放弃使用placeholder, 在input标签下添加一个<span>, 代码介绍如下:

<div><input/><span>提示信息...</span></div>

上述代码<div>相对布局, <span>绝对布局, 然后通过top+left属性定位, 这样下来表面工作还不错, 但是当点击输入框和点击输入框上的<span>上的提示信息时, 输入框获取不到焦点, 于是又给<span>添加了一个onClick事件, 在该事件中通过如下代码使输入框获取焦点:

  const node = e.currentTarget.parentNode;
  const inputNode = node.children[0];
  inputNode.focus();

接下来, 当输入框输入数据是只要在<input/>的onChagnge方法中将提示信息清除即可.

经过上述步骤, 需求一基本完成.

需求三:
在需求一完成基础上, 如果提示信息超出输入框, 可以通过css3将超出文本信息设置为省略号, css代码如下:

  white-space: nowrap;   // 处理元素内的空白,禁止折行
  overflow: hidden;    // 内容益处会被修剪,并且其余内容是不可见的
  text-overflow: ellipsis;   // 文本超出包含元素用省略号代表被修剪的文本

如此问题又来了 --- 为适应不同分辨率, 输入框的宽度会随屏幕分辨率大小不同而发生变化, <span>标签不可能用固定的宽度, 所以这里<span>宽度应该继承父元素宽度, 即
inherit, 这样做的结果就是, 文本信息从前到后出现在输入框, 省略号早已超出 输入框,如下图所示:


选区_002.png

于是乎, 只好给<span>标签添加个内边距搞定, 如下图:


选区_003.png
(点击该搜索框会变长, 然后自然就看到所有提示信息, 输入数据提示信息消失)

相关文章

网友评论

      本文标题:placeholder

      本文链接:https://www.haomeiwen.com/subject/oyikmxtx.html