Обнаружение падения в текстовое поле с помощью Javascript

StackOverflow https://stackoverflow.com/questions/472498

Вопрос

Все, что мне нужно, это уметь определять, когда текст помещается в Textarea. Затем я беру этот текст, делаю с ним что-нибудь и очищаю текстовую область. Таких текстовых областей может быть много и очень высокие ожидания от пользовательского интерфейса, поэтому опрос - это последнее средство.

Для IE " onfocus " делает свое дело, так как это событие вызывается после того, как пользователь уронит содержимое в текстовую область.

Для Firefox я не могу найти подходящее событие. Я пробовал onmouseup и onchange ... не знаю, что еще можно попробовать оттуда. Я бы не хотел опрашивать текстовую область для контента. Помощь высоко ценится. Спасибо.

Редактировать: для уточнения, " упал " означает, что пользователь выбирает текст (обычно) со страницы, но не имеет значения, куда, перетаскивает его и помещает в текстовую область. Это не то же самое, что Ctrl + V, или вставка правой кнопкой мыши (которая использует два разных метода обнаружения, кстати) или (очевидно) ввод текста в текстовой области. В частности, это & Quot; drop & Quot; аспект перетаскивания. Я действительно не знаю, как еще это сформулировать.

Я чувствую, что этот вопрос был сформулирован довольно точно. Чтобы меня утешить, предположим, что я имел в виду любые другие операции над текстовой областью, которыми вы все решили поделиться. Если бы я имел в виду & Quot; paste & Quot ;, не думаете ли вы, что я упомянул бы что-то о вставке в заголовке или содержании моего вопроса? То же самое касается ввода в текстовой области. Но, возможно, вы все просто недостаточно хорошо меня знаете, чтобы понять, что я пишу то, что имею в виду, вместо того, чтобы ошибочно печатать то, что имеет отношение только к тому, что я имею в виду.

Это было полезно?

Решение 2

Голосование кажется единственным выходом.

Когда в браузере запускается операция перетаскивания, кажется, что она отменяет все, что происходит. Вы можете убедиться в этом, поставив & Quot; onmouseover & Quot; события на странице, затем запуск операции DnD и перетаскивание по ней. События не сработают.

Кажется, это лишь совпадение того, как браузер внутренне обрабатывает " перетаскивание " что он вызывает onfocus () для textarea в IE и Safari. Я сомневаюсь, что в спецификации W3 многое определено ... не то, чтобы это имело значение, W3 - дерьмо, и, кроме того, никто не придерживается его полностью.

В своем вопросе я заявил о роскоши выгрузки textarea после каждого использования, поэтому я чувствую, что опрос для: textarea.value.length > 0 вряд ли является какой-либо ценой и не должен быть слишком эффективным беспокойство.

Но, увы, это конкретно связано с добавлением контента в текстовую область.

Вниз мод, чтобы успокоить вашу боль.

Другие советы

Для Firefox это работает для меня:

window.addEventHandler("dragdrop", function(event) {alert("Drop it like it's hot!")}, true)

Однако в Safari не работает. Не пробовал IE.

Если вы хотите, чтобы текстовое поле реагировало на удаление, вставку или ввод текста, единственным решением будет кнопка. Даже таймер опроса контента вам не поможет.

Вы упоминаете, что хотите, чтобы пользователь мог вводить текст в текстовой области. И вы упоминаете, что хотите очистить текст всякий раз, когда происходит событие. Браузер не может узнать, что пользователь закончил печатать. Вы должны полагаться на конкретное действие.

Теперь для удаления или вставки вы можете положиться на события mouseup и keyup, чтобы обнаружить это.

Что вы подразумеваете под " drop " ;? Вы говорите об операции вставки (^ V)? Если ответ Арона действительно верный, вы получите keydown / keyup (и значение будет доступно для чтения в keyup).

Общий обратный вызов, который будет происходить при любом обновлении ввода, называется «onchange» - вы можете попробовать это. Обратите внимание, что при наборе он не вызывается до тех пор, пока вы не закончите и не сфокусируете ввод, поэтому, если вам нужны мгновенные обновления как при наборе текста, так и при других формах ввода, вам все равно нужен также 'onkeyup'.

Изменить повторное разъяснение: IMO 'onchange' должен запускаться, когда перетаскивание приводит к добавлению контента в текстовую область; Я считаю это ошибкой браузера, что это не так (по крайней мере, в Firefox). В этом случае я могу только согласиться с тем, что опрос - это все, что у вас осталось.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top