barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

пятница, 1 апреля 2011 г.

Отмена submit формы по нажатию Enter (работает везде, даже в Opera!)

Бывает нужно отменить submit формы по нажатию клавиши Enter, когда фокус находится, например, в текстовом поле (мне это понадобилось при реализации всплывающих подсказок ввода). Видел в интернете множество решений, некоторые из которых пугали своей сложностью или работали не во всех браузерах. В итоге остановился на таком варианте: добавить этому полю обработчики keyup, keydown и keypress следующего вида:
function(event){
    event = event || window.event;
    // если Enter - обработать
    if(event.keyCode==13)
      {
      // отменить действия по-умолчанию для Enter, остановить всплытие
      event.preventDefault ? event.preventDefault() : (event.returnValue=false);
      event.stopPropagation ? event.stopPropagation() : (event.cancelBubble = true);
      return false;
     }
   }

Возможно, немного избыточно, но точно работает в IE8, FF 3.6.8 и Opera 10.6, и, в отличие от других вариантов, не требует модифицировать html код формы, выносить кнопку submit за пределы формы, и делать прочие телодвижения, особенно противопоказанные, если Вы пишите библиотечное решение, а не одну единственную страницу.

Если добавить только один обработчик keydown, перестает работать в Опере.

Один минус - не работает при отключенном JavaScript, но это, по-моему, свойственно всем решениям - при отключенном JS либо остается работать submit по Enter, либо пропадает возможность submit`a вообще,что, на мой взгляд, куда опаснее.

Комментариев нет:

Отправить комментарий