最近在微信小程序开发的过程中,不经意间又踩了两个坑。
这两个坑吧,踩的那叫一个意外啊。
一、value的长度居然大于maxlength,什么鬼?
事情是这样的。
一个input/textarea输入框,产品要求限制最大输入字数为50。看,多么简单的一个需求,加一个maxlength=50就搞定了。
但是,真的搞定了吗?
是的,一般场景下,的确搞定了。用户最多只能输入50个字,多一个都不能。
但是,非一般场景来了。
测试小姐姐为了方便测试,复制了一大段文字(远多于50字)到上述输入框内。从页面上看,的确只有50个字。但是一保存,传给后端的内容却远超50字,导致接口报错。
输入框value的实际长度居然大于maxlength, 这是为什么?
百思不得其解!只能曲线救国了。
也就是,传给后端时,截取字符串,保证传给后端的值,最多只有50字。
value.slice(0,50)
所以,以后遇到需要限制字数的输入框,在设置maxlength的同时,截取一下字符串,相当于上了一个双保险。
二、被fixed在屏幕底部的按钮,居然上下滚动了?
一般情况下,被fixed在屏幕底部的按钮(就是简单的fixed,没有加其他效果),是不会随着页面滚动的。
一直以来,我们也没有发现,该按钮可以滚动。
但是,就在昨天,一个很偶然的操作,我们那个被固定在屏幕底部的按钮,居然上下滚动了。
我们来场景重现下:
一个页面长度超过一屏的表单,一个被固定在屏幕底部的按钮,我们进入该页面,一直往上滚动,按钮是不动的,但是一旦编辑某个表单,然后再上下来回滚动,按钮就随之滚动了。
该页面的原代码结构如下:
<view class="main-form">
... 此处省略n个表单
</view>
<view class="footer-btn-box">
<view class="btn-class" bindtap="handleSave">保存</view>
</view>
后来,将代码调整了一下:
<scroll-view scroll-y="true" scroll-with-animation="true" style="height: 100vh;">
<view class="main-form">
... 此处省略n个表单
</view>
</scroll-view>
<view class="footer-btn-box">
<view class="btn-class" bindtap="handleSave">保存</view>
</view>
这样,无论怎么操作,按钮都不动了!
就在写此段文字的时候,我又按原代码想重现一下昨天的场景,结果按钮无论怎么操作,也是不动的。明明昨天按钮在那个场景下是会动的呀,难道眼花了?
哎,不管眼花不花,以后还是采取下面写法吧!
======= 以下是2023年4月17日更新 ========
三、弹框中的textarea,placeholder样式初次加载不生效?
最近在弹框中,写了一个textarea文本域,都是按之前的写法写的,肯定没问题。结果,就发现,弹框初次加载的时候,textarea里的placeholder样式是不生效的,也就是不是那种浅灰色,而是我们正常输入内容后的字体颜色。
而当在textarea 输入了内容后,再删掉,placeholder显示的样式就正常了。
真是奇怪,好在找到了解决办法,如下:
showPop(){
if(!this.content){
this.setData({
content: '占位符'
})
setTimeout(()=>{
this.setData({
content: ''
})
},50);
}
this.setData({
isShowPop: true
})
}