textarea ios机上输入一段文本,在文本中间输入文字后,光标却到最后了
发布于 6 年前 作者 gyang 15139 次浏览 来自 问答

textarea

1.ios机上输入一段文本,在文本中间输入文字后,光标却到最后了,安卓机上是ok的;

2.官方提出的bindinput(e),e.detail.cursor不是value的length,在文本中间输入文字后,cursor就不对了

9 回复

不能每个input、textarea都这样监听cursor啊

是bindinput 事件 setDate渲染页面造成的,解决方法:只把值保存下来,不用setData

其实textarea不加bindtap方法,不修改默认value的originText值,光标就不会有那个问题,只要修改了originText的值,ios上光标就是会到最后,而且cursor也会失效

关于问题2,暂时处理方式是,‍设计改了文案,改成“限制100字符”   cusor其实可以用value.length来处理

我也遇到了

写了一个demo,真机必现的问题

js文件:

Page({

  data: {

    originText: ‘测试测试测测试测试测测试测试测测试测试测测试测试测测试测试测测试测试测测试测试测测试测试测测试测试测测试测试测’

  },

  inputWishMsg: function(e) {

    this.setData({

      originText: e.detail.value

    })

  }

})

wxml文件

<view class=“container”>

  <textarea value="{{originText}}" style=“height: 8em” bindinput=“inputWishMsg”></textarea>

</view>

wxss文件

textarea {

    width: 700rpx;

    padding: 25rpx 0;

}

同样的问题,因为 setData 会重置整个输入框,还得监听 cursor 位置,再去 set cursor

但是 input / textarea 的 cursor 属性失效了,请尽快解决。


其实更重要的是,重新 setData 时,输入框的 cursor 能不能不自动跳转呢?

安卓下是没问题的,就 iOS 有问题。

你好,后续我们会修复这个问题,目前有2种方法可以处理这个问题

  1. 在bindinput事件回调里面返回cursor和value

bindInputHandler: function (e) {

this.setData({

originText: e.detail.value

})

return {

cursor: e.detail.cursor,

value: e.detail.value

}

}

  1. bindinput事件回调把input的value存为另外一个变量供后续使用

我也遇到同样问题

就是textarea组件,基础用法

前提:bindinput监听方法中改变value的值,输入一些内容后,需要在内容中插入一些字

问题:

1.光标选入内容中,输入一些文字后,在ios上光标又定位到内容最后了

2. bindinput内的e.detail.cursor不是value的length

麻烦提供一下出现问题的机型和微信版本,并且给个相关的代码片段(https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/minicode.html)或者appid,我们定位下问题

回到顶部