小程序在开发过程中,输入框的应用需求越来越普遍,那么在使用它的时候有什么坑呢?
一、有某个场景,需要设置input和textarea组件的初始值,所以,我将value属性设置为初始值。然后,在编辑文字的过程中,如果我将光标移到文字中间某个位置,然后进行删除或插入文字的操作,光标会立即跳转到输入框的最后,非常影响编辑的体验。
在真机测试中有这个问题,而模拟器中没有!
请问这个问题如何解决?
(部分手机:苹果会有这个问题。安卓机不会有这个问题)
要想解决这个问题就必须知道为什么会出现这种情况,然后再解决问题
首先,我们设置的初始值value = "{{textareaValue}}"的之后,自定义bindTextareaInput事件,在每次输入文字后,都会改变textareaValue的值。初始值不断被更新改变。导致每次编辑完成,光标都会跳到最后进行编辑。无法对中间文字进行修改
我采取的措施
1、在输入框标签内设置初始值属性value = "{{textareaValue}}",并且这个属性值是个固定值,不会改变。然后再定义变量来存放用户再输入框输入的数据,这样一来,用户每次输入数据改变的就不是初始值。而是我们另外声明定义的变量。光标也不会每次都跳到最后。就可以对中间文字进行修改。
2、 如果开发需求中,没有涉及到初始值,也可不设置初始值。这样也就不会有这个问题。
二、 textarea、input的文本框标签,遮罩层无法覆盖文字问题
textarea 组件是由客户端创建的原生组件,它的层级是最高的,不能通过 z-index 控制层级。那我们是怎么做到让遮罩层覆盖文字问题呢?
1.使用透明度(ps:编辑器可行,但真机测试还是显示)
2.文字颜色透明(想利用光标随文字颜色变化的也不行)
3.文字颜色改变后只剩下光标闪动,想利用caret-color改变也是行不通的
4.想利用官方提供的光标位置设置的属性比方:selection-start、selection-end、cursor也是不行,并没有什么用
5.直接dispaly: none隐藏也不行,会出现文本域再次出现文字消失问题
最后最后。。。。实在没办法,我就采取了一个比较笨的方法
1、自己定义了个view,当有遮罩层时,就把textarea 组件隐藏掉,显示自己定义的view,自然,view对应的值也是textarea 组件输入的值
2、遮罩层去掉时,显示textarea 组件
通过显示隐藏的方法,解决了 textarea、input的文本框标签,遮罩层无法覆盖文字问题
【温馨提示】
去判断显示隐藏时,切记不要用wx:if,不然当你显示你自己定义的view,隐藏textarea 组件后,再重新展示textarea 组件时,之前输入的文字会被清空。可以采用hidden的方法,去展示隐藏相对应的模块。