Відповіді:
$(window).keypress(function(event) {
if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true;
alert("Ctrl-S pressed");
event.preventDefault();
return false;
});
Ключові коди можуть відрізнятися між веб-переглядачами, тому вам може знадобитися перевірити їх більше ніж 115.
keydownзамість keypresschrome
Це працює для мене (використовуючи jquery) для перевантаження Ctrl+ S, Ctrl+ Fі Ctrl+ G:
$(window).bind('keydown', function(event) {
if (event.ctrlKey || event.metaKey) {
switch (String.fromCharCode(event.which).toLowerCase()) {
case 's':
event.preventDefault();
alert('ctrl-s');
break;
case 'f':
event.preventDefault();
alert('ctrl-f');
break;
case 'g':
event.preventDefault();
alert('ctrl-g');
break;
}
}
});
else ifне працюватиме, оскільки оригінальне ifтвердження вже буде оцінено як істинне. Вам доведеться поставити свій код перед початковим ifтвердженням, перетворивши оригінал в else if.
Ви можете використовувати бібліотеку ярликів для обробки конкретних речей браузера.
shortcut.add("Ctrl+S",function() {
alert("Hi there!");
});
Це рішення jQuery працює для мене в Chrome і Firefox, і для Ctrl+, Sі для Cmd+ S.
$(document).keydown(function(e) {
var key = undefined;
var possible = [ e.key, e.keyIdentifier, e.keyCode, e.which ];
while (key === undefined && possible.length > 0)
{
key = possible.pop();
}
if (key && (key == '115' || key == '83' ) && (e.ctrlKey || e.metaKey) && !(e.altKey))
{
e.preventDefault();
alert("Ctrl-s pressed");
return false;
}
return true;
});
e.keyзамість e.which;
Цей працював для мене на Chrome ... чомусь event.whichповертає велику S (83) для мене, не знаю, чому (незалежно від стану блокування шапки), тому я використовував fromCharCodeі toLowerCaseпросто бути в безпечній стороні
$(document).keydown(function(event) {
//19 for Mac Command+S
if (!( String.fromCharCode(event.which).toLowerCase() == 's' && event.ctrlKey) && !(event.which == 19)) return true;
alert("Ctrl-s pressed");
event.preventDefault();
return false;
});
Якщо хтось знає, чому я отримую 83, а не 115 , я буду радий почути, також якщо хтось тестує це в інших браузерах, я буду радий почути, працює він чи ні
Я поєднав декілька варіантів для підтримки FireFox, IE та Chrome. Я також оновив його для кращої підтримки mac
// simply disables save event for chrome
$(window).keypress(function (event) {
if (!(event.which == 115 && (navigator.platform.match("Mac") ? event.metaKey : event.ctrlKey)) && !(event.which == 19)) return true;
event.preventDefault();
return false;
});
// used to process the cmd+s and ctrl+s events
$(document).keydown(function (event) {
if (event.which == 83 && (navigator.platform.match("Mac") ? event.metaKey : event.ctrlKey)) {
event.preventDefault();
save(event);
return false;
}
});
Я б хотів, щоб веб-додатки не відміняли мої клавіші швидкого доступу за замовчуванням, якщо чесно. Ctrl+ Sвже щось робить у браузерах. Це різка зміна залежно від сайту, який я переглядаю, є руйнівним і розчаровує, не кажучи вже про часто баггі. У мене був угон сайтів Ctrl+ Tabтому, що він виглядав так само, як Ctrl+ I, і вони руйнують мою роботу над сайтом і заважають мені перемикати вкладки, як зазвичай.
Якщо ви хочете клавіші швидкого доступу, використовуйте accesskeyатрибут. Будь ласка, не порушуйте існуючу функціональність браузера.
@Eevee: Оскільки браузер стає домом для більшого та багатшого функціоналу та починає замінювати додатки для настільних ПК, це просто не буде можливістю відмовитися від використання комбінацій клавіш. Багатий і інтуїтивно зрозумілий набір команд клавіатури Gmail сприяв моїй готовності відмовитися від Outlook. Комбінації клавіш у Todoist, Google Reader і Google Calendar - щоденно покращують моє життя.
Розробники безумовно повинні бути обережними, щоб не перекрити натискання клавіш, які вже мають значення в браузері. Наприклад, текстове поле WMD, яке я набираю, незрозуміло інтерпретує Ctrl+ Delяк "блокчетування", а не "видалити слово вперед". Мені цікаво, чи є десь стандартний список ярликів "безпечних для браузера", якими можуть скористатися розробники сайтів, і браузери зобов'язуються триматися подалі від наступних версій.
$(document).keydown(function(e) {
if ((e.key == 's' || e.key == 'S' ) && (e.ctrlKey || e.metaKey))
{
e.preventDefault();
alert("Ctrl-s pressed");
return false;
}
return true;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Try pressing ctrl+s somewhere.
Це оновлена версія відповіді @ AlanBellows, яка замінює whichна key. Він також працює навіть із відключенням основного ключа Chrome (де, якщо натиснути Ctrl+, Sвін надсилає велику S замість s). Працює у всіх сучасних браузерах.
Це було моє рішення, яке читати набагато простіше, ніж інші пропозиції, може легко включати інші комбінації клавіш, і було протестовано на IE, Chrome та Firefox:
$(window).keydown(function(evt) {
var key = String.fromCharCode(evt.keyCode);
//ctrl+s
if (key.toLowerCase() === "s" && evt.ctrlKey) {
fnToRun();
evt.preventDefault(true);
return false;
}
return true;
});
String.fromCharCode. Незважаючи на те, що у Mac немає клавіші управління. Перевірте командний ключ за допомогою evt.metaKey. Він повертається trueдля Cmd на Mac та Win у Windows.
Мені подобається цей маленький плагін . Для цього потрібно трохи більше зручності для браузера.
Це має працювати (адаптовано з https://stackoverflow.com/a/8285722/388902 ).
var ctrl_down = false;
var ctrl_key = 17;
var s_key = 83;
$(document).keydown(function(e) {
if (e.keyCode == ctrl_key) ctrl_down = true;
}).keyup(function(e) {
if (e.keyCode == ctrl_key) ctrl_down = false;
});
$(document).keydown(function(e) {
if (ctrl_down && (e.keyCode == s_key)) {
alert('Ctrl-s pressed');
// Your code
return false;
}
});
приклад:
shortcut.add("Ctrl+c",function() {
alert('Ok...');
}
,{
'type':'keydown',
'propagate':false,
'target':document
});
використання
<script type="text/javascript" src="js/shortcut.js"></script>
посилання для завантаження: http://www.openjs.com/scripts/events/keyboard_shortcuts/#
На відповідь Алана Беллоуса:! (E.altKey) додано для користувачів, які використовують AltGrпід час введення тексту (наприклад, Польща). Без цього натискання AltGr+ Sдасть такий самий результат, як і Ctrl+S
$(document).keydown(function(e) {
if ((e.which == '115' || e.which == '83' ) && (e.ctrlKey || e.metaKey) && !(e.altKey))
{
e.preventDefault();
alert("Ctrl-s pressed");
return false;
}
return true; });
Цей плагін, зроблений мною, може бути корисним.
Ви можете скористатися цим плагіном, який вам належить поставити ключові коди та функцію, яку слід запускати таким чином
simulatorControl([17,83], function(){
console.log('You have pressed Ctrl+Z');
});
У коді я показав, як виконати для Ctrl+ S. Детальну документацію ви отримаєте за посиланням. Плагін знаходиться в розділі коду JavaScript моєї ручки на Codepen.
Я вирішив свою проблему в IE , використовуючи a, alert("With a message")щоб запобігти поведінці за замовчуванням:
window.addEventListener("keydown", function (e) {
if(e.ctrlKey || e.metaKey){
e.preventDefault(); //Good browsers
if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) { //hack for ie
alert("Please, use the print button located on the top bar");
return;
}
}
});