Обнаружение падения в текстовое поле с помощью Javascript - PullRequest
0 голосов
/ 23 января 2009

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

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

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

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

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

Ответы [ 4 ]

4 голосов
/ 23 января 2009

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

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

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

0 голосов
/ 23 января 2009

Опрос, кажется, единственный путь.

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

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

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

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

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

0 голосов
/ 23 января 2009

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

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

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

0 голосов
/ 23 января 2009

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

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

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

...