Показать сообщение отдельно
  #1 (permalink)  
Старый 20.08.2008, 22:57
Аспирант
Отправить личное сообщение для no_alex Посмотреть профиль Найти все сообщения от no_alex
 
Регистрация: 20.08.2008
Сообщений: 56

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 и даже без оного - результат тот-же.
Ответить с цитированием