#javascript #html #css #reactjs
#javascript #HTML #css #reactjs
Вопрос:
В настоящее время я создаю компонент react, в котором я работаю с числами. Для чисел есть тег ввода, он форматирует число при вводе.
Если я введу 50000,50, он автоматически отформатирует его до 50,000.50
Теперь я хочу выделить это число с помощью мыши и скопировать его. После вставки его в какое-либо другое место он должен вставить его неформатированным способом, например: 50000.50 (копирование фактического числа без разделителей)
Я где-то видел, что при выборе чисел разделители не выделяются. Я хочу что-то подобное. Но изо всех сил пытаюсь его найти.
Пожалуйста, помогите мне!!!
Комментарии:
1. Вы можете удалить форматирование в событии
onselect
(срабатывает, когда пользователь выбирает текст) и повторно добавить егоonblur
(срабатывает, когда пользователь отменяет выбор)
Ответ №1:
Используйте CSS, выбираемый пользователем.
Свойство CSS, выбираемое пользователем, определяет, может ли пользователь выделять текст.
<div>50<span style="user-select: none">,</span>000.50</div>
Комментарии:
1. Это супер круто 🙂 Но что, если есть поле ввода, которое форматирует число при вводе, и мы хотим выбрать из него число. Я думаю, что отредактирую свой вопрос.
2. @Ragu Затем вам нужно изменить ‘value’ входных данных в ‘focus’ и изменить его обратно на форматированное значение в ‘blur’. Другого способа, afaik, нет. Приветствия
Ответ №2:
Переполнение стека отключило возможность копирования здесь, но это должно сработать. Если вы получаете входные данные из какого-либо источника, вы можете задать одно значение для копирования и отобразить его в другом формате.
function commafy(number) {
return number.toString().replace(/B(?=(d{3}) (?!d))/g, ",");
}
const MyComponent = () => {
// Assume this data is coming from props or an API call
const data = {name: 'Test', price: '50000'}
const [copySuccess, setCopySuccess] = React.useState('');
const copyToClipBoard = copyMe => {
try {
navigator.clipboard.writeText(copyMe);
setCopySuccess('Price copied');
} catch (e) {
setCopySuccess('Failed to copy');
}
};
return (
<div>
<div>Name: {data.name}</div>
<div>Price: {commafy(parseFloat(data.price).toFixed(2))}</div>
<button onClick={() => copyToClipBoard(data.price)}>
Copy
</button>
<div>{copySuccess}</div>
</div>
)
}
ReactDOM.render(<MyComponent/>, document.getElementById('root'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.13.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.13.1/umd/react-dom.production.min.js"></script>
<div id="root"></div>