Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > отслеживание нажатия мышки и клавиши


Автор: chiffa 10.12.2009, 01:21
Добрый вечер. мне нужно отследить нажатие клавиши ctr+левая кнопка мышки. Искал в сети не нашел как перехватить клик мышой, понимаю что должно быть как то так:

Код

<body onkeydown="if(event.keyCode == 17 &amp;&amp; *****) alert('YES');">


но немогу нигде найти что должно быть вместо *****. Может кто знает? буду признателен за помощь!

И еще вопрос, как можно реализовать что бы данное срабатывало только когда мышка будет над конкретным объектом. тоесть к примеру есть:

Текст1
Текст2
Текст3

при нажатии на del "YES" должно выводится только тогда когда мышка будет над Текст2.

Автор: Amphiluke 10.12.2009, 09:41
Разбирайтесь.  smile 
Код

<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Документ</title>
<script type="text/javascript">
var isMouseOverTxt2 = false;

function clickHandler(evnt) {
    var ev = (evnt) ? evnt : event;
    if (ev.button == 0 && ev.ctrlKey)
        alert("кликнули с зажатой клавишей Ctrl");
}

function keydownHandler(evnt) {
    var ev = (evnt) ? evnt : event;
    if (ev.keyCode == 46) {
        if (isMouseOverTxt2) {
            alert("нажали Del, когда курсор был над \"Текст2\"");
        }
    }
}

function moveroutHandler(evnt) {
    var ev = (evnt) ? evnt : event;
    isMouseOverTxt2 = (ev.type == "mouseover");
}

function __addEventHandler(obj, ev, handler) {
    if (obj.addEventListener) {
        obj.addEventListener(ev, handler, false);
    } else {
        obj.attachEvent("on" + ev, handler);
    }
}
function addEventHandlers(evnt) {
    __addEventHandler(document, "click", clickHandler);
    __addEventHandler(document, "keydown", keydownHandler);
    var txt2Obj = document.getElementById("txt2");
    if (txt2Obj != null) {
        __addEventHandler(txt2Obj, "mouseover", moveroutHandler);
        __addEventHandler(txt2Obj, "mouseout", moveroutHandler);
    }
}

__addEventHandler(window, "load", addEventHandlers);
</script>
</head>

<body>
    <p>Текст1</p>
    <p><span id="txt2">Текст2</span></p>
    <p>Текст3</p>
</body>
</html>


Добавлено через 3 минуты и 8 секунд
P.S. Если будут конкретные вопросы — задавайте.

Автор: chiffa 10.12.2009, 11:42
пасиба! то что нужно!  smile

буду разбиратся. а не подскажешь где про данную технологию можно почитать по подробнее?

Добавлено @ 11:50
Не работает если

 <p>Текст1</p>
    <p><span id="txt2">Текст2</span></p>
    <p>Текст3</p>

подгружается Аджаксом....

Автор: Amphiluke 10.12.2009, 12:50
Практически абсолютно всё, что нужно, можно найти 
  •  здесь: https://developer.mozilla.org
  •  здесь: http://msdn.microsoft.com
  •  здесь: http://www.w3.org

С AJAX не работает потому, что в данном сценарии обработчики событий типа mouseover/mouseout добавляются при загрузке документа. Можно попробовать вызвать функцию addEventHandlers в обработчике события OnReadyStateChange при readyState=4. 


P.S. Сижу без мыши, довольно неудобно отвечать по теме... :(

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)