利用contenteditable模拟input/textarea的可编辑文本,placeholder,限制长度,自适应高度等。

html,css真是神奇。应产品需求。需要做一个自适应,内容完整展示的可编辑输入框。textarea,input都是不合适。如是发现html有个神奇的属性contenteditable。

先看看效果:

下面贴代码:

 <p class="bot-item buy-message flex-space-between">
   <i>买家留言:</i>
   <span contenteditable="true" @keyup="checkLimitLength($event)" class="textarea-content" placeholder="填写与商家协商好的内容(选填)"></span>
</p>
.bot-item {
            padding: .3rem 0;
            border-bottom: solid 1px #f3f3f3;

            i {
                font-style: normal;
                padding-top: 0.02rem;
            }
            .textarea-content{
                flex:1;
                outline:none;
                word-break: break-all;
                line-height: 0.32rem;
                &:empty:before{
                    // 模拟palceholder
                    content: attr(placeholder);
                    color: #999999;
                    font-size: 0.28rem;
                }
                &:focus:before{
                    // 模拟palceholder 聚焦
                   content: none;
                }
            }
checkLimitLength: debounce(500, function(el) {
            //keyup防抖
            let limitText = el.target.innerHTML;
            let limitLen = el.target.innerHTML.length;
            if(el.target.innerHTML == ''){
                // 模拟删除文本为空后,显示placeholder
                el.target.blur();
            }
            if(limitLen > 200){
                // 字数超过200,光标失焦。不可再输内容
                el.target.blur();
                el.target.innerHTML = limitText.substr(0, 200);
            }
            this.remarks = el.target.innerHTML.substr(0, 200);
            // console.log(this.remarks,limitLen,'limitLen*');
            // debugger;
        })

 tips:remarks留言提交的时候传给后端即可。这里不需要双向绑定,防抖debounce是封装的方法,百度就有

效果:

 

文本清空后,也显示了placeholder。

 

还有一种大佬帮写的js,判断光标是否聚焦。显示placeholder等。可借鉴。vue的动态绑定更改即可。暂未尝试。效果类似。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值