JavaScript скрипты


Сохранение по Ctrl+S в браузере

Размещена 24 июля, 2008 года


При работе с элементами ввода данных (текстовые поля, селекты, чекбоксы и др) вместо полагающейся кнопки "Сохранить" иногда так и хочется нажать привычное Ctrl+S. Это неизменно приводит к появлению стандартного браузерного диалога, который предложит вам сохранить текущую html-страницу.

С помощью JavaScript попытаемся:
- заблокировать появление диалога о сохранении;
- отловить нажатие клавиш и запустить клиентскую функцию;


Для блокирования стандартной обработки событий в браузере используются:
1) Метод preventDefault() объекта event. Поддерживается в Gekko и Opera.
2) Свойство returnValue объекта event, поддерживаемое в IE.
Обработчики вешаем с помощью специальной функции для их добавления.


В зависисмости от браузера блокирование производится для события keydown или keypress.
После того, как диалог о сохранении будет убит, можно вызвать угодную нам функцию. Итак, код:
// Функция для добавления обработчиков событий 
function addHandler(object, event, handler, useCapture) { 
   if (object.addEventListener) { 
      object.addEventListener(
         event, handler, useCapture ? useCapture : false
      ); 
   } else if (object.attachEvent) { 
      object.attachEvent('on' + event, handler); 
   } else alert("Add handler is not supported"); 
} 

// Определяем браузеры 
var ua = navigator.userAgent.toLowerCase(); 
var isIE = (ua.indexOf("msie") != -1 && 
   ua.indexOf("opera") == -1 
   && ua.indexOf("webtv") == -1); 
var isGecko = (ua.indexOf("gecko") != -1); 

// Добавляем обработчики 
if (isIE) addHandler (document, "keydown", hotSave); 
else addHandler (document, "keypress", hotSave); 

function hotSave(evt) { 
   // Получаем объект event 
   evt = evt || window.event; 
   var key = evt.keyCode || evt.which; 
   // Определяем нажатие Ctrl+S 
   key = !isGecko ? (key==83?1:0) : (key==115?1:0); 
   if (evt.ctrlKey && key) { 
      // Блокируем появление диалога о сохранении 
      if(evt.preventDefault) evt.preventDefault(); 
evt.returnValue = false; 
      // Запускаем любую функцию, по желанию 
      clientFunction(); 
      // Возвращаем фокус в окно 
      window.focus(); 
      return false; 
   } 
} 
function clientFunction() { 
   alert( 
      "Появления диалогового окна не произошло.\n"+
      "Вместо этого алерта пропишите любой другой JS-код." 
   ); 
}


Проверено в (win): - IE6, IE7;
- FF 1.5, NN 7.1, NN 8.0, Mozilla 1.7;
- Opera 7.1, 7.5, 8.0, 9.01, 9.2;

Пример работы:

Нажмите Ctrl + S


Все права на статью принадлежат сайту fastcoder.org
SAPE все усложнил?

MainLink - простая и прибыльная продажа ссылок!

Последние поступления:

Стишки пирожки про Олега⁠⁠

Размещена 20 июня 2024 года

Олег купил презервативы
Проник в семидесятый год
И подарил их папе с мамой
Такой нелепый суицид

читать далее…

Размещена 10 августа 2020 года

Я по ТВ видел, что через 10 лет мы будем жить лучше, чем в Германии...
Я не понял, что это они с Германией сделать хотят?!

читать далее…

ТехЗадание на Землю

Размещена 14 марта 2018 года

Пpоект Genesis (из коpпоpативной пеpеписки)

читать далее…

Шпаргалка по работе с Vim

Размещена 05 декабря 2017 года

Vim довольно мощный редактор, но работа с ним не всегда наглядна.
Например если нужно отредактировать какой-то файл например при помощи crontab, без знания специфики работы с viv никак.

читать далее…

Ошибка: Error: Cannot find a valid baseurl for repo

Размещена 13 сентабря 2017 года

Если возникает ошибка на centos 5 вида
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/

читать далее…