V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fancy2020
V2EX  ›  程序员

被一个 iOS Safari 上的问题恶心到了

  •  
  •   fancy2020 ·
    fanchangyong · 2020-07-06 18:20:17 +08:00 · 1548 次点击
    这是一个创建于 1599 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先,在页面上有一个 input,然后在 js 中动态的改变 input 的 readOnly 属性,比如点击 input 的时候取消 readonly 属性,onblur 的时候加上 readonly 使它变为只读的。

    比如如下 React 代码:

    1 import React, { useState, useRef } from 'react';
     2 import logo from './logo.svg';
     3 import './App.css';
     4
     5 function App() {
     6   const [editable, setEditable] = useState(true);
     7   const ref = useRef();
     8
     9   function handleClick() {
    10   ┆ setEditable(true);
    11   }
    12
    13   function handleBlur() {
    14   ┆ setEditable(false);
    15   }
    16
    17   return (
    18   ┆ <div className="App">
    19   ┆ ┆ <input
    20   ┆ ┆ ┆ ref={ref}
    21   ┆ ┆ ┆ onClick={handleClick}
    22   ┆ ┆ ┆ onBlur={handleBlur}
    23   ┆ ┆ ┆ readOnly={!editable}
    24   ┆ ┆ />
    25   ┆ </div>
    26   );
    27 }
    28
    29 export default App;
    

    然后在 iOS Safari 上的表现是,当 readOnly 由 false 变为 true 的时候,input 中有光标但是无法唤起虚拟键盘。 在网上搜了一圈,貌似也没找到太多相关资料

    5 条回复    2020-07-07 17:03:23 +08:00
    joesonw
        1
    joesonw  
       2020-07-06 18:32:45 +08:00   ❤️ 1
    KuroNekoFan
        2
    KuroNekoFan  
       2020-07-07 10:01:20 +08:00
    scroll 一下,focus 一下试试
    holybig
        3
    holybig  
       2020-07-07 14:17:01 +08:00
    onClick 改 onFocus
    fancy2020
        4
    fancy2020  
    OP
       2020-07-07 16:46:41 +08:00
    1 楼的方案可以解决,谢谢大家
    xingyuc
        5
    xingyuc  
       2020-07-07 17:03:23 +08:00
    setTimeout 试试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   989 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:00 · PVG 06:00 · LAX 14:00 · JFK 17:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.