在iphone机型上,input实时中文搜索时,拼音会不断触发onchange的解决方案

6 篇文章 0 订阅
3 篇文章 0 订阅

在移动端用H5做实时搜索功能时,发现在安卓上没问题,但iphone机型上有如下问题:

  1. 当输入中文时,待选拼音的变动会不断触发onchange事件,导致请求太多
  2. 当input绑定的value值是父组件传过来时, input输入不了了
    【背景说明】原构想是,父组件传值valueFromFather给子组件input的value, 子组件input检测到变化后抛出去valueNew给父组件,父组件依此valueNew发出请求并修改绑定给子组件的valueFromFather = valueNew, 这样相当于子组件不处理任何业务逻辑,是个实时搜索纯组件,方便以后复用。但发现在iphone上,这个思路传递value时,input输入不了任何东西了

最后解决办法如下:

  1. 问题1频繁触发onchange的问题,用onCompositionStart,onCompositionUpdate,onCompositionEnd处理,这样的好处是拼音待选的变动不会触发onchange
  2. 问题2不能输入的问题,只要input不要添加value属性即可。(这样虽然可以解决问题,但我还是很疑惑)

【代码如下】

// html
<input
   type="text"
   placeholder="请输入"
   onCompositionStart={handleCompositionStart}
   onCompositionUpdate={handleCompositionStart}
   onCompositionEnd={handleCompositionEnd}
   onChange={handleChange}
 />
 
 //js
  let inputFlag = true;
  const handleChange = e => {
    e.persist();
    setTimeout(function() {
      if (inputFlag) {
        const targetValue = e.target.value;
        props.OnSearchValueChanged(targetValue);
      }
    }, 0);
  };

  const handleCompositionStart = () => {
    inputFlag = false;
  };

  const handleCompositionEnd = () => {
    inputFlag = true;
  };
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值