gpt4 book ai didi

reactjs - 为什么 select() 不能在 Safari 上使用 ReactJS 工作?

转载 作者:行者123 更新时间:2023-12-03 14:12:01 27 4
gpt4 key购买 nike

每当我单击/点击/聚焦该字段时,我希望获得一个 TextField 以选择该字段中当前的整个文本。以下代码适用于 Chrome (71.0.3578.98),但不适用于 Safari (12.0.2)。有什么想法吗?

import React from "react";
import ReactDOM from "react-dom";

import "./styles.css";

function App() {
return (
<>
<h1>Test Focus React</h1>
<input
type="text"
defaultValue="test"
onFocus={event => {
event.target.select();
}}
/>
</>
);
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

Edit pkqzz7nxz0

然而这个没有任何 React 的静态 HTML 文件在 Safari 上工作得很好。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Test Focus JS</title>
</head>
<body>
<h1>Test Focus JS</h1>
<input type="text" value="test" onClick="this.select();" />
</body>
</html>

Edit 6l20oq76jn

谁能帮我看看如何使用 React 让选择在 Safari 上工作?

最佳答案

当与 DOM 交互之类的事情失败时,通常与事件在不同上下文(react 与 onclick)中同步/异步触发的方式有关,甚至与浏览器(Safari 有时有奇怪的优化)有关。

我猜它只需使其异步即可工作,例如:

import React from "react";
import ReactDOM from "react-dom";

import "./styles.css";

function App() {
return (
<>
<h1>Test Focus React</h1>
<input
type="text"
defaultValue="test"
onFocus={event => {
// event properties must be copied to use async
const target = event.target;
setTimeout(() => target.select(), 0);
}}
/>
</>
);
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

Edit test-focus-react

关于reactjs - 为什么 select() 不能在 Safari 上使用 ReactJS 工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54229359/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com