IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   "Горячие клавиши" для субмита (https://www.imho.ws/showthread.php?t=62443)

Makc 23.06.2004 18:08

"Горячие клавиши" для субмита
 
Уважаемые, как отловить нажатие Ctrl+Enter для кнопочки? Просто хочу на форуме сделать отправку сообщений по "горячей клавише"?

Hubbitus 24.06.2004 00:11

Почему нельзя просто использовать параметр кнопки accesskey?

Hubbitus 24.06.2004 01:23

Да, наверное если с Контролом еще, то может и нельзя... исправляюсь, вот пример как отлавливать подобные события:
Код:

<html>
<head>
<script>
function kb_handler(evt) {
    if (evt.which==13){
        if (evt.ctrlKey){
        alert('Событие Ctrl+Enter отловлено, дальше что-то делаем, например сейчас отправляем данные формы.');
        evt.preventDefault();
        evt.stopPropagation();
        document.myForm.submit();
        }
    }
}
</script>
</head>
<body>

<form method=post name=myForm>
<script>
document.myForm.addEventListener("keypress", kb_handler, true);
</script>

<b>Ваше имя<br> <input type=text>
<p>Ваш e-mail <input type=text>
<p>Описание чего-то<br>
<textarea></textarea>
<input type=submit value="Отправить сообщение">
</body>
</html>

Прошу сильно не ругаться, т.к. набросал его за пяток минут....
Там обработчик события на форму вешается, соответственно можешь выбрать что тебе нужно, или сузить (например на отдельное поле) или расширить (например на весь документ)...

Sheryld 24.06.2004 02:06

в IE не кактит(в 6.0), видимо он не поддерживает addEventListener :(

Hubbitus 24.06.2004 02:20

Цитата:

Sheryld:
в IE не кактит(в 6.0), видимо он не поддерживает addEventListener
Поддерживает!
Разве что обращение к форме может быть другое.... какие ошибки?
Если честно, я в IE вообще не проверял ;)

Sheryld 24.06.2004 02:33

Маленько подправил, тестил на опере 7.x и на IE 6.0, но на более старых версиях будет работать или нет - неизвестно, в любом случае надо писать сначала свою библиотеку, для определения броузера, а по нему уже поределять методы и свойства, а также возможную функциональность элемента, или вообще отказаться от оного.
А если ориентироваться на IE only, то лучше использовать Behavior Script, подробнее смотрим MSDN и MS Site.
Код:

<html>
<head>
<script>
function kb_handler(evt)
{
    if (evt.keyCode==13)
    {
        if (evt.ctrlKey)
        {
                alert('Событие Ctrl+Enter отловлено, дальше что-то делаем, например сейчас отправляем данные формы.');
                document.myForm.submit();
        }
    }
}
</script>
</head>
<body>

<form method=post name=myForm>
<script>
document.myForm.attachEvent('onkeydown',kb_handler);
</script>

<b>Ваше имя<br> <input type=text>
<p>Ваш e-mail <input type=text>
<p>Описание чего-то<br>
<textarea></textarea>
<input type=submit value="Отправить сообщение">
</body>
</html>


Hubbitus 24.06.2004 03:48

Да в опере-то оба работают... зато второй не работает в Мозилле...
Да, я действительно поискал, и выяснил что addEventListener() это DOM2, который, как всем известно, IE поддерживает как ....гм... не буду на приличном форуме говорить как.. ;)
Так что для совместимости придется все-таки браузер определять, правильно Sheryld говорит...

Makc 24.06.2004 13:54

Hubbitus, Sheryld
Большое вам спасибо! Первый скрипт пашет в Mozilla (я его юзаю), но не пашет в IE. Второй полностью наоборот... А можно сделать что бы и там и там работало? Гибрид, так сказать... :)

Hubbitus 24.06.2004 14:46

Ну если самому проверку браузера не добавить, то держи более или менее универсальный вариант:
Код:

<html>
<head>
</head>
<body>

<form method=post name=myForm>
<script>

</script>

<b>Ваше имя<br> <input type=text>
<p>Ваш e-mail <input type=text>
<p>Описание чего-то<br>
<textarea></textarea>
<input type=submit value="Отправить сообщение">
</form>

<script>
//set browser vars
var ua = navigator.userAgent.toLowerCase();
isIE = ((ua.indexOf("msie") != -1) && (ua.indexOf("opera") == -1) && (ua.indexOf("webtv") == -1));
isGecko = (ua.indexOf("gecko") != -1);

    if (isIE) document.myForm.attachEvent('onkeydown',kb_handler);
    else document.myForm.addEventListener("keypress", kb_handler, true);

function kb_handler(evt) {

    if (isIE){//Если Експлореер
        if (evt.keyCode == 13){
            if (evt.ctrlKey){
            alert('Событие Ctrl+Enter отловлено, дальше что-то делаем, например сейчас отправляем данные формы.');
            document.myForm.submit();
            }
        }
    }
    else{//Нормальный браузер с поддержкой DOM2
        if (evt.which == 13){
            if (evt.ctrlKey){
            alert('Событие Ctrl+Enter отловлено, дальше что-то делаем, например сейчас отправляем данные формы.');
            document.myForm.submit();
            }
        }

    }
}
</script>
</body>
</html>


Makc 24.06.2004 16:26

Hubbitus, наиогромнейшее спасибо!!! Если бы мог, то еще раз добавил репутации! :biggrin:


Часовой пояс GMT +4, время: 18:55.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.