Как отключить возврат, когда флажки ввода сфокусированы в jQuery?

Как отключить кнопку возврата, когда в jQuery сфокусирован ввод checkboxes? Когда фокусируется checkboxes и я нажимаю клавишу Backspace (код клавиши = 8), браузер думает, что я пытаюсь вернуться на страницу назад, и использует Backspace как команду history.go(-1).

$("div#types input").focus(function(){
  window.onkeydown = function(e){
    return !(e.keyCode == 8);
};

person sadmicrowave    schedule 14.04.2010    source источник
comment
Почему вы пытаетесь нарушить типичный шаблон пользовательского интерфейса браузера? Я категорически отвергаю необходимость этого, если только вы не создаете чрезвычайно специализированное веб-приложение, в котором часто используются сочетания клавиш.   -  person Matchu    schedule 14.04.2010
comment
это именно то, что я делаю. Это не веб-страница для широкой публики. Это приложение будет использоваться только на 2 компьютерах КОГДА-ЛИБО и нуждается в этой функциональности.   -  person sadmicrowave    schedule 14.04.2010


Ответы (1)


Ну, это остановит кнопку возврата назад в любое время:

$(document).keydown(function(e) {
  if (e.keyCode === 8)
  {
     return false;
  }
});

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

Редактировать:

Проблема с выяснением того, имеет ли флажок фокус, заключается в том, что он получает фокус только в том случае, если он находится на вкладке или фактически установлен в коде. Если по нему щелкнуть, он будет отмечен, но на самом деле он не фокусируется (по крайней мере, в chrome/safari). Все зависит от того, как вы установите фокус.

Редактировать 2:

Чтобы ваш флажок имел фокус при нажатии, просто добавьте это:

$('input[type=checkbox]').click(function() {
   $(this).focus();
});

... так что, собрав все это вместе, флажок будет сфокусирован на щелчке и остановит кнопку возврата, когда флажок имеет фокус (все внутри функции $(document).ready, конечно):

$(document).keydown(function(e) {
    if (e.keyCode === 8 && $('input[type=checkbox]:focus').size() > 0)
    {
       return false;
    }
});

$('input[type=checkbox]').click(function() {
    $(this).focus();
});
person ryanulit    schedule 14.04.2010
comment
какие-либо предложения о том, как это исправить? - person sadmicrowave; 14.04.2010