react中IOS手機里面兩個input同時存在時,聚焦focus失效解決辦法


最近在做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>
        )
    },

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM