Я пытаюсь настроить меню, по которому можно переместиться через клавиши со стрелками. У меня есть эта рабочая пластина в Firefox.
При попытке заставить это работать в IE8 и после небольшого количества борьбы, нашел, что это было, потому что IE8 не зарегистрирует нажатие клавиши на стрелках. Протестировать:
$(document).keypress(function (eh){
alert(eh.keyCode);
};
В Firefox, нажимая любые из клавиш со стрелками инициировал бы предупреждение 37, 38, 39 или 40.
В IE8, ничем. Любой другой включает стандартную QWERTY-клавиатуру, зарегистрировался бы, но не клавиши со стрелками.
Действительно ли это - проблема с моим JavaScript? Установка браузера? Установка Windows?
Из документации 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>
Попробуйте следующее:
$(document).keydown(function (e) {
if(!e) {
e = window.event;
}
switch(e.keyCode) {
case 37:
goLeft();
break;
case 39:
goRight();
break;
}
});
Как переопределить шаблон Объект
, например
<%@ 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>
<% } %>
-121--4321021- Запись невозможна.
Вы можете сделать копию еще раз и перезаписать старую копию.
-121--4435159-Используйте событие «keydown»
Поскольку я иногда не хочу, чтобы события всплывали для некоторых ключей, я использую что-то вроде: Настройте коды / ключи по своему усмотрению .
/* 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);
});