美文网首页
div模仿input框

div模仿input框

作者: warryy | 来源:发表于2018-04-20 18:56 被阅读807次

input 框中内容较多时,在 ios 端和华为mate(具体几忘记了)上出现内容无法左右滚动的 bug,所以想到用 div 来模拟 input 框的方法来解决此问题。


第一次想到用js来动态的添加或删除 input 框中的默认灰色文字

html:

<div class="imitate-input imitate-placeholder js-imitate-input" contenteditable="true">在此输入内容</div>

css:

<style>
        .imitate-input{
            width: 260px;
            height: 16px;
            border: 1px solid dodgerblue;
            border-radius: 3px;
            padding: 13px 10px;
            size: 16px;
            line-height: 16px;
            outline: none;
            color: #000;
        }
        .imitate-placeholder{
            color: #999;
        }
    </style>

js:

<script>
    // 获取元素
    var jsInput = document.querySelector('.js-imitate-input');
    // 获取焦点
    jsInput.addEventListener('focus', function () {
        if (jsInput.innerText == '在此输入内容'){
            jsInput.classList.remove('imitate-placeholder');
            jsInput.innerText = '';
        }
    });
    // 失去焦点
    jsInput.addEventListener('blur', function () {
        if (jsInput.innerText == ''){
            jsInput.classList.add('imitate-placeholder');
            jsInput.innerText = '在此输入内容';
        }
    });
</script>

效果图:

正常显示.png
获取焦点.png
但是如果我们点击输入框的时候点到了文字内容的时候:
点击红色区域.png
输入框则会失去光标,并无法编辑内容:
失去光标.png
辛亏让我遇到了这个bug,不然我就不会去问大牛,从而发现一个更好的实现方法:

用css来实现,无须js:

html:

<div class="imitate-input" contenteditable="true" placeholder="在此输入内容"></div>

css:

<style>
        .imitate-input{
            width: 260px;
            height: 16px;
            border: 1px solid dodgerblue;
            border-radius: 3px;
            padding: 13px 10px;
            size: 16px;
            line-height: 16px;
            outline: none;
            color: #000;
            white-space: nowrap;
            overflow-x: scroll;
            overflow-y: hidden;
            word-break: normal;
        }
        /* 清除左右滚动条 */
        .imitate-input::-webkit-scrollbar{
            display: none;
        }
        .imitate-input:empty:before{
            content: attr(placeholder);
            color: #999;
        }
        .imitate-input:focus:before{
            content: none;
        }
    </style>

效果堪称完美:

正常1.png
正常2.png
本来以为完美的解决了问题,此时我的心情是这样的(~ ̄▽ ̄)~,但是测试小哥竟然在输入框中输入了空格和换行!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
结果页面结构成了这样:
在输入框中输入换行符.png
在输入框中输入空格.png
此时如果我将数据传给后端,后端则出现了若干个问号。。。此问题目前没解决。所以个人目前没找到完美的 div 模仿 input 框方法,如果你被坑进来了,请不要 diss 我,因为我此时的心情(ಥಥ)(ಥಥ)(ಥ_ಥ)

相关文章

网友评论

      本文标题:div模仿input框

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