Обнаружение Клавиши со стрелкой нажимает в IE с помощью javascript/jQuery

Я пытаюсь настроить меню, по которому можно переместиться через клавиши со стрелками. У меня есть эта рабочая пластина в Firefox.

При попытке заставить это работать в IE8 и после небольшого количества борьбы, нашел, что это было, потому что IE8 не зарегистрирует нажатие клавиши на стрелках. Протестировать:

$(document).keypress(function (eh){ 
    alert(eh.keyCode);
};

В Firefox, нажимая любые из клавиш со стрелками инициировал бы предупреждение 37, 38, 39 или 40.

В IE8, ничем. Любой другой включает стандартную QWERTY-клавиатуру, зарегистрировался бы, но не клавиши со стрелками.

Действительно ли это - проблема с моим JavaScript? Установка браузера? Установка Windows?

15
задан Tim Down 7 February 2010 в 23:35
поделиться

4 ответа

Из документации jQuery нажатие клавиши (последний абзац вводного текста):

Обратите внимание, что keydown и keyup укажите код, указывающий, какая клавиша нажата, а нажатие клавиши указывает, какой символ был введен. Например, строчная буква «a» будет сообщаться как 65 при нажатии keydown и keyup , но как 97 при нажатии клавиши . Заглавная буква «А» во всех событиях отображается как 97. Из-за этого различия, при перехвате специальных нажатий клавиш, таких как клавиши со стрелками, лучше выбрать .keydown () или .keyup () .

Здесь даже буквально упоминается о клавишах со стрелками;) Таким образом, вам действительно нужно задействовать события keydown или keyup . Вот SSCCE с keydown , просто скопируйте и запустите его. Нет, вам не нужно выполнять проверку совместимости с браузером для события , это работает во всех браузерах от IE6 до Firefox.

<!doctype html>
<html lang="en">
    <head>
        <title>SO question 2217553</title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
        <script>
            $(document).keydown(function(event) {
                switch (event.keyCode) {
                    case 37: alert('left'); break;
                    case 38: alert('up'); break;
                    case 39: alert('right'); break;
                    case 40: alert('down'); break;
                }
            });
        </script>
    </head>
    <body>
       <p>Press one of the arrow keys.</p> 
    </body>
</html>
38
ответ дан 1 December 2019 в 00:26
поделиться

Попробуйте следующее:

$(document).keydown(function (e) {
    if(!e) {
        e = window.event;
    }
    switch(e.keyCode) {
    case 37:
        goLeft();
        break;
    case 39:
        goRight();
        break;
    }
});
7
ответ дан 1 December 2019 в 00:26
поделиться

Как переопределить шаблон Объект , например

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
    <% if (ViewData.TemplateInfo.TemplateDepth > 3) { %>
        <%= ViewData.ModelMetadata.SimpleDisplayText %>
    <% } else { %>
        <table>
        <% foreach (ModelMetadata prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm))) { %>
            <% if (prop.HideSurroundingHtml) { %>
                <%= Html.Display(prop.PropertyName) %>
            <% } else { %>
                <tr>
                    <td>
                        <div class="display-label" style="text-align: right;">
                            <%= Html.Label(prop.PropertyName) %>
                        </div>
                    </td>
                    <td>
                        <div class="display-field">
                            <%= Html.Display(prop.PropertyName) %>
                            <%= Html.ValidationMessage(prop.PropertyName, "*") %>
                        </div>
                    </td>
                </tr>
            <% } %>
        <% } %>
        </table>
    <% } %>

См. http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html

-121--4321021-

Запись невозможна.

Вы можете сделать копию еще раз и перезаписать старую копию.

-121--4435159-

Используйте событие «keydown»

2
ответ дан 1 December 2019 в 00:26
поделиться

Поскольку я иногда не хочу, чтобы события всплывали для некоторых ключей, я использую что-то вроде: Настройте коды / ключи по своему усмотрению .

/* handle special key press */
function checkCptKey(e)
{
    var shouldBubble = true;
    switch (e.keyCode)
    {
        // user pressed the Tab                                                                                                                                        
        case 9:
            {
                $(".someSelect").toggleClass("classSelectVisible");
                shouldBubble = false;
                break;
            };
            // user pressed the Enter    
        case 13:
            {
                $(".someSelect").toggleClass("classSelectVisible");
                break;
            };
            // user pressed the ESC
        case 27:
            {
                $(".someSelect").toggleClass("classSelectVisible");
                break;
            };
    };
    /* this propogates the jQuery event if true */
    return shouldBubble;
};

/* user pressed special keys while in Selector */
$(".mySelect").keydown(function(e)
{
    return checkCptKey(e);
});
1
ответ дан 1 December 2019 в 00:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: