Firefox: перехватить соббытие при перетаскивании текста
Народ, подскажите реально ли каким-либо образом перехватить событие (хоть какое-нибудь), при перетаскивании текста мышкой (drag-n-drop) в момент "бросания" его в textarea или input.
Вот примеры кодов с которыми с которыми я экспериментировал: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Test 1</title> <script type="text/javascript"> <!--//--><![CDATA[//><!-- function t1() { alert("onchange"); } function t2() { alert("onmouseup"); } //--><!]]> </script> </head> <body> <form action="#" method="get" name="f0" id="f0"> <textarea rows="5" cols="180" name="q1" id="q1">Lorem Ipsum is simply dummy text of the printing and typesetting industry.</textarea> <textarea rows="5" cols="180" name="q2" id="q2" onchange="t1();" onmouseup="t2();"></textarea> </form> </body></html> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Test 2</title> </head> <body> <form action="#" method="get" name="f0" id="f0"> <textarea rows="5" cols="180" name="q1" id="q1">Lorem Ipsum is simply dummy text of the printing and typesetting industry.</textarea> <textarea rows="5" cols="180" name="q2" id="q2"></textarea> </form> <script type="text/javascript"> <!--//--><![CDATA[//><!-- document.forms.f0.q2.onchange = function() { alert("onchange"); } document.forms.f0.q2.onmouseup = function() { alert("onmouseup"); } //--><!]]> </script> </body></html> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Test 3</title> </head> <body> <form action="#" method="get" name="f0" id="f0"> <textarea rows="5" cols="180" name="q1" id="q1">Lorem Ipsum is simply dummy text of the printing and typesetting industry.</textarea> <textarea rows="5" cols="180" name="q2" id="q2"></textarea> </form> <script type="text/javascript"> <!--//--><![CDATA[//><!-- function t1() { alert("onchange"); } document.forms.f0.q2.addEventListener("change", t1, true); function t2() { alert("onmouseup"); } document.forms.f0.q2.addEventListener("mouseup", t2, true); //--><!]]> </script> </body></html> Во всех случаях не происходит никакого события при перетаскивании текста из верхнего textarea в нижний. Я попробовал все возможные события, на примере вот такого скрипта (для третьего примера): var a = [ "change", "focus", "blur", "paste", "mousedown", "mouseup", //"mouseover", //"mouseout", //"mousemove", "click" ]; function t(event) { alert(event.type); } for (var i in a) { document.forms.f0.q2.addEventListener(a[i], t, true); } Единственное событие, которое здесь происходит и может мне помочь хоть косвенно решить данную проблему это "mouseover", потому что реально это событие происходит сразу после "бросания" текста. И все-же это решение очень грязное, т.к. событие "mouseover" будет генерировать множество ложных срабатываний, которые мне надо будет отсеивать. Опера (по крайней мере 9.27 - в других я не проверял) ведет себя точно так-же. Но на данный момент меня устроит решение, которое будет работать только в FireFox 3+. P.S. Я на всякий случай протестил с различными DOCTYPE и даже без оного - результат тот-же. |
Можно издалека? А вам зачем?
|
Kolyaj,
Странный вопрос... :eek: Мне нужно отловить момент изменения текста в textarea. Поскольку onchange в этот момент не происходит - я ищу альтернативные варианты. |
По setTimeout отлавливать изменения, больше никак. Т.к. можно, например, и из другого окна перетащить, и CTRL-V нажать, и контекстным меню вставить.
|
По setTimeout это очень накладно. Сильно часто его делать - перегружать клиентский компьютер множеством холостых операций, а если редко, то это будет неэффективно.
Пока что, как я смотрю, меня "mouseover" для этих целей устраивает (в комплексе с событиями обрабатывающими клавиатуру). По крайней мере сейчас у меня еще не возникало ситуаций, которые бы остались "не отслежены". Но может быть у кого-то есть еще варианты решения этой проблемы? |
Как обрабатывается событие вставки текста из контекстного меню?
|
Kolyaj,
Резонное замечание! :cool: Действительно это у меня не отработало, пока я не отвел мышку и не завел ее обратно на textarea. Ща попробую новое событие, которое якобы появилось в FireFox3 "onpaste". |
С onpaste - гемор!
Когда это событие происходит тект еще не вставлен. Он реально вставляется после отработки этого события. Прийдется обработку этого события через "нулевую" задержку запускать. |
Kolyaj,
Цитата:
|
Как к setTimeout придете, скажете :)
Главное не делать свой таймер для каждого контрола, а один на всех, тогда особых тормозов не будет. А можно вообще один таймер для подобных нужд держать. Ну и, разумеется, не запускать следующую итерацию, пока предыдущая не отработала. |
Часовой пояс GMT +3, время: 17:17. |