最近在做webapp搜索功能时,用到两个input同时存在时,轻点input聚焦时,ios手机软键盘弹起又失效,一直在寻找合理的解决办法,现在最简单的总结回顾:

<一>bug显示

<二> 最终测试通过的修改方案

1. 安卓保持不动,原生input当点击的时候可以自动聚焦;

2. ios单个input的也是正常的,就是两个input在一起失效;

3. 当两个input在一起的时候,每一个input外面包裹一层div,里面有一个span标签。

测试代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div {
width: 120px;
height:24px;
border: 1px solid #ccc;
position: relative;
}
div span {
display: block;
width: 120px;
height:24px;
position: absolute;
top:0;
left:0;
}
</style>
</head>
<body>
<div>
<input type="text" id="iosInput">
<span id="iosContainer"></span>
</div>
</body>
<script type="text/javascript">
iosContainer.addEventListener("click",function(e){
iosInput.focus();
});
</script>
</html>

备注: 我最终的代码结构,在ios手机和安卓手机表现度正常了

ios事件执行代码

componentDidMount:function(){
if(/(APPLEWEBKIT|Safari|Android)/i.test(this._ua)) {
$('.cmr-sr_notice').css({'position':'fixed'});
}else{
iosContainer_01.addEventListener("click",function(e){
iosInput_01.focus();
});
iosContainer_02.addEventListener("click",function(e){
iosInput_02.focus();
});
}
},

布局结构

timelyNotice:function(){
var _this = this,
iosInput_01='',
iosInput_02='';
// ios 通过外部点击事件来取货焦点,安卓还保持原生的不动
if(/(APPLEWEBKIT|Safari|Android)/i.test(this._ua)) {
iosInput_01 = (
<input type='text' placeholder='书名' maxLength='100'
className='co-font-biggest cmr-sr_notice-input'
onChange={_this.valChange.bind(_this,1)}
value={_this.state.valBookname}
onBlur={_this.inputBlur}
ref='valBookname'
/>
);
iosInput_02 = (
<input type='text' placeholder='作者' maxLength='100'
className='co-font-biggest cmr-sr_notice-input'
onChange={_this.valChange.bind(_this,2)}
onBlur={_this.inputBlur}
value={_this.state.valAuhtorname}
ref='valAuhtorname'
/>
)
}else {
iosInput_01 = (
<div style={{position:'relative'}}>
<input type='text' placeholder='书名' maxLength='100'
className='co-font-biggest cmr-sr_notice-input'
onChange={_this.valChange.bind(_this,1)}
value={_this.state.valBookname}
id='iosInput_01'
onBlur={_this.inputBlur}
ref='valBookname'
/>
<span id='iosContainer_01' style={{display:'block',width:'100%',height:'100%',position:'absolute',top:'0',left:'0'}}></span>
</div>
);
iosInput_02 = (
<div style={{position:'relative'}}>
<input type='text' placeholder='作者' maxLength='100'
className='co-font-biggest cmr-sr_notice-input'
onChange={_this.valChange.bind(_this,2)}
onBlur={_this.inputBlur}
id='iosInput_02'
value={_this.state.valAuhtorname}
ref='valAuhtorname'
/>
<span id='iosContainer_02' style={{display:'block',width:'100%',height:'100%',position:'absolute',top:'0',left:'0'}}></span>
</div>
)
}
     /**/
return(
<section className='cmr-sr_notice'
style={{display:_this.state.timelyNotice}}>
<div className='cmr-sr_notice-con' ref='mainPupop'>
<p className='co-font-large cmr-sr_notice-title'>填写书籍信息</p>
{iosInput_01}
<img src={_this.state.close_img}
className='cmr-sr_notice-img'
style={{"display":_this.state.close_button_01?"block":"none"}}
onClick={_this.emptyInput.bind(_this,1)} />
{iosInput_02}
<img src={_this.state.close_img}
className='cmr-sr_notice-img cmr-sr_notice-img2'
style={{"display":_this.state.close_button_02?"block":"none"}}
onClick={_this.emptyInput.bind(_this,2)} />
<p className='co-font-normal cmr-sr_notice-pro'>~ 该书上架后将第一时间通知您 ~</p>
<div className='co-font-largest cmr-sr_notice-sure'>
<span className='cmr-sr_notice-no' onClick={_this.closePupop}>取消</span>
<span
style={{color:_this.state.colorConfirm}}
className='cmr-sr_notice-yes'
onClick={_this.propmtBook}>提交</span>
</div>
</div>
</section>
)
},

react中IOS手机里面两个input同时存在时,聚焦focus失效解决办法的更多相关文章

  1. IOS 中微信 网页授权报 key[也就是code]失效 解决办法

    枪魂微信平台ios手机点击返回 网页授权失败,报key失效.已经解决,原因是授权key只能使用一次,再次使用就会失效. 解决办法:第一次从菜单中进行授权时,用session记录key和open_id. ...

  2. IIS7.5中调试.Net 4.0网站出现无厘头500错误的解决办法 (转)

    刚刚 部署了ii7的dll的有x86写的,就会出现以下这样的问题 iis 7 x86,Could not load file or assembly 'Name' or one of its depe ...

  3. Advanced Installer 中测试数据库连接提示“未发现数据源名称并且未指定默认驱动程序”的解决办法

    原文:Advanced Installer 中测试数据库连接提示"未发现数据源名称并且未指定默认驱动程序"的解决办法 最近需要制作一个安装包,安装包的要求如下: 1.用户手工填写M ...

  4. npm install 报错 error Unexpected end of JSON input while parsing near '...sShrinkwrap":false,"d' 解决办法

    npm install 报错 : error Unexpected end of JSON input while parsing near '...sShrinkwrap":false,& ...

  5. jquery代码修改input的value值,而页面上input框的值没有改变的解决办法

    问题描述: 在搜索框中输入一些字符,并且点击搜索框右边的五角星做收藏操作时,打开的弹框中Save Search:后面的input中的值被赋值了外面搜索框的值,但是当此次操作完成之后,再次做同样的操作, ...

  6. php中session同ip不同端口的多个网站session冲突的解决办法

    在局域网内使用IP加端口的访问方式搭了两个相同程序的站,结果发现用户在一个站下登录后,在另一个站也同时登录了,在一个退出后,另一个站也同时退出了.看了下程序发现两个站都是使用纯session方式记录登 ...

  7. H5在ios弹窗状态下调起输入法后关闭输入法页面元素错位解决办法

    最近开发移动端,有个需求:点击退款弹出文本框和发送短信按钮,输入手机号码和验证码确定退款. 发现安卓手机没毛病,但是在ios手机上点击文本框调起输入法,此时点击完成或者关闭输入法就无法正常操作了,肉眼 ...

  8. FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法

    出现问题场景:       作为刚接触FreeRTOS实时操作系统的菜鸟,我在练习一个程序功能:按键3按下,将LED闪烁的任务挂起:按键4按下,将LED闪烁的任务恢复到就绪.按键使用外部中断.恢复就绪 ...

  9. 在Linux下安装PHP过程中,编译时出现错误的解决办法

    在Linux下安装PHP过程中,编译时出现configure: error: libjpeg.(a|so) not found 错误的解决办法 configure: error: libjpeg.(a ...

随机推荐

  1. C# Task 暂停与取消 或 C#中可取消的Task

    (1)https://www.cnblogs.com/zhengzc/p/10724839.html (2)https://blog.csdn.net/hxfhq1314/article/detail ...

  2. SaltStack 是一个服务器基础架构集中化管理平台

    SaltStack详细部署   一.基础介绍============================================================================== ...

  3. cisco ap客户端无规律掉线

    设备 cisco air-ct2504-50-k9 cisco air-ap1832I-H-k9 首先根据这个帖子 https://community.cisco.com/t5/other-wirel ...

  4. [转帖](区块链补习班)ERC20很多人都听过,但ERC是什么你真的了解吗?

    (区块链补习班)ERC20很多人都听过,但ERC是什么你真的了解吗? http://baijiahao.baidu.com/s?id=1600948969290990883&wfr=spide ...

  5. 第一个python小脚本

    第一个python小实验 前言 作为一个工作1年的linux运维搬砖师来说,发现没点开发能力真的是不好混啊.于是下定决心学习python! 直接上刚写的语句(大神莫鄙视) 通过控制台输入一个账号密码, ...

  6. sublime_python编译_输出台中文为乱码

    Evernote Export sublime_python编译_输出台中文为乱码 创建时间: 2019-10-17 星期四 10:52 作者: 苏苏 标签: sublime, 乱码       问题 ...

  7. Mysql】Mysql中CURRENT_TIMESTAMP,CURRENT_DATE,CURRENT_TIME,now(),sysdate()各项值的区别

    CURRENT_TIMESTAMP,CURRENT_DATE,CURRENT_TIME,now(),sysdate()各项值的区别,我们可以通过在终端下,查看结果就能知道: SELECT CURREN ...

  8. 九校联考-DL24凉心模拟Day2总结

    T1 锻造 forging 题目描述 "欢迎啊,老朋友." 一阵寒暄过后,厂长带他们参观了厂子四周,并给他们讲锻造的流程. "我们这里的武器分成若干的等级,等级越高武器就 ...

  9. react-navigation 的抽屉效果 createDrawerNavigator (DrawerNavigator)

    一.前言: react-navigation  3.x 版本中, 使用createDrawerNavigator 替换 原先的DrawerNavigator 方法: 那么,当前createBottom ...

  10. P1349 广义斐波那契数列(矩阵乘法)

    题目 P1349 广义斐波那契数列 解析 把普通的矩阵乘法求斐波那契数列改一改,随便一推就出来了 \[\begin{bmatrix}f_2\\f_1 \end{bmatrix}\begin{bmatr ...