textarea默认的高度不是对着内容变化,而是随着内容增多,出现了滚动条。目前的需求是实现一个能够输入的textarea,并且高度跟着内容变化。
发现了一个比较好用的插件flexText,但是这个基于jquery写的,目前的技术栈是react,所以简单看了下,然后用原生的js模拟了一个实现。
- <div class="body">
- <div class="container">
- <pre class="pre"><span /><br /><br /></pre>
- <textarea class="content" placeholder="请输入内容" oninput="changeContent()"></textarea>
- </div>
- </div>
最外层的div不需要样式,重点在里面的pre和textarea
textarea绝对定位,高度为100%,也就是高度随着外面container的高度变化。
pre是块元素,占用空间但是不可见。在textarea输入的时候,实时的把内容写入到pre中,因为pre是container的子元素,且所以外层container的高度会被pre的高度撑开。
- .container{
- position: relative;
- }
- .content{
- position:absolute;
- top:0;
- left:0;
- height:100%;
- background: transparent;
- outline:0;
- resize:none;
- overflow:hidden;
- }
- .container pre {
- display:block;
- visibility:hidden;
- }
- function changeContent(){
- var $textarea = document.getElementsByClassName('content');
- var $pre = document.getElementsByClassName('pre');
- $pre[0].innerHTML = $textarea[0].value;
- }
- <!doctype html>
- <html>
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style>
- .container{
- position: relative;
- }
- .content{
- position:absolute;
- top:0;
- left:0;
- height:100%;
- background: transparent;
- outline:0;
- font-size: inherit;
- color: inherit;
- line-height: inherit;
- text-indent: inherit;
- letter-spacing: inherit;
- resize:none;
- overflow:hidden;
- }
- .container pre {
- display:block;
- visibility:hidden;
- }
-
- </style>
- </head>
- <body>
- <div class="body">
- <div class="container">
- <pre class="pre"><span /><br /><br /></pre>
- <textarea class="content" placeholder="请输入内容" oninput="changeContent()"></textarea>
- </div>
- </div>
- <script>
- function changeContent(){
- var $textarea = document.getElementsByClassName('content');
- var $pre = document.getElementsByClassName('pre');
- $pre[0].innerHTML = $textarea[0].value;
- }
- </script>
- </body>
- </html>
onkeyup使用复制粘贴时,高度不能自动改变
onchange事件:在内容改变(两次内容有可能相等)且失去焦点时触发,不能实时同步
oninput事件:HTML5 的标准事件,可以用来检测元素通过用户界面发生的内容变化,在内容修改后立即被触发
wxml:
<view class="text-box"> <text>{{currentInput}}</text> <textarea class="weui-textarea" placeholder="请输入文本" bindinput="getInput" maxlength="1000"/> </view>
wxss:
.text-box{ width:100%; position: relative; min-height:80rpx; margin-top:17rpx; } .text-box text{ display:block; visibility:hidden; word-break:break-all; word-wrap:break-word; } .text-box .weui-textarea{ height:100%; position: absolute; left:0; top:0; overflow-y:hidden; word-break:break-all; word-wrap:break-word; }
js:
Page({
data: {
currentInput:''
},
getInput:function(e){
this.setData({
currentInput: e.detail.value
})
}
})
提醒:默认textarea应该是200个字,如果想要增加字数限制,使用maxlength属性
扩展:如果想给textarea输入的文字加删除线,只需把text的visibility:hidden; 属性去掉,给textarea加一个透明的颜色就可以了。透明颜色:color:rgba(52, 52, 52,0.5);
链接:https://blog.csdn.net/liuwengai/article/details/78987957
input标签主要用于Web表单的创建交互,以便接受来自用户的数据。 我们通过更改type属性的值,来实现不同的输入类型。这篇文章主要讲解html5中新增的表单属性。
使用ajax方式进行验证某个元素的值(只是验证元素的值,而不是ajax方式提交表单),默认会提交当前验证的值到请求的地址,如果要提交其它的值,可以使用data选项。
vee-validate基于vue2的表单验证组件,这篇文章主要讲解它的安装,引用,基础使用,内置的校验规则,自定义校验规则。Validator是以$validator被组件自动注入到Vue实例的,同时也可以独立的进行调用
checkbox复选框可能是网站中常用的HTML元素,但大多数人并不满意它的默认样式,这篇文章就讲讲如何实现input checkbox复选框控件 样式美化效果。::before和::after伪元素的用法
input是我们接受来自用户的数据常用标签,在前端开发中:移动端底部input被弹出的键盘遮挡。控制input显/隐密码。在input中输入emoji表情导致请求失败。input多行输入显示换行。输入框首尾清除空格-trim()、在input中监听键盘事件
input输入限制只能为数字的2种方法,通过onkeypress事件和onkeyup事件,输不上任何非数字字符。加上正则匹配不能输入非数字字符就可以了
input,textarea限制字数,实时绑定的方式:1.在input 或 textarea中加属性 、 2.js判断,拓展: 实时绑定功能:二种输入标签的实时绑定方式 。 需求:框后面有显示字数
使用 onkeyup 事件,有 bug ,那就是在中文输入法状态下,输入汉字之后直接回车,会直接输入字母,使用 onchange 事件,在输入内容后,只有 input 丧失焦点时才会得到结果,并不能在输入时就做出响应,使用 oninput 事件,完美的解决了以上两种问题
在项目开发期间发现谷歌浏览器有记住密码的功能,该功能有个问题就是一遇到input type=password就开始自动填充,同一个账户还好,就是bug了。找了一堆解决方案终于找到了办法,下面分享一下解决方案。
在HTML中,<form></form>标记对用来创建一个表单,即定义表单的开始和结束位置,在标记对之间的一切都属于表单的内容。每个表单元素开始于form元素,可以包含所有的表单控件
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!