2013-02-13 2 views
4

Я использую плагин JQuery Hotkeys: http://code.google.com/p/js-hotkeys/Невозможно переопределить Ctrl + S в Firefox с помощью JQuery Hotkeys

Вот код, я использую:

$(document).bind('keydown', 'Ctrl+s', function(event) { alert('saving?'); return false; }); 

В Chrome он работает отлично и функциональность по умолчанию Ctrl + отключена, но в Firefox она вызывает предупреждение, а также пытается сохранить html-страницу.

Я знаю, что должно быть каким-то образом, чтобы заставить его работать, Wordpress в Firefox давайте нажмем ctrl + s для сохранения.

Любые идеи?

ответ

8

Похоже на ошибку в Firefox, где alert нарушает синхронизацию вашего кода. Отсрочка предупреждения кажется, чтобы обойти этот вопрос:

$(document).bind('keydown', 'Ctrl+s', function(event) { 
    setTimeout(function() { 
    alert('saving?'); 
    }, 0); 
    return false; 
}); 

JSbin


Вот тест, чтобы доказать мою ошибку претензию.

$(document).bind('keydown', 'Ctrl+s', function(event) { 
    event.preventDefault(); 
}); 

Вышеуказанное (bin) предотвратит диалог сохранения. Теперь, если добавить предупреждение либо до, либо после него, сохранить диалог будет появляться, тем не менее, если вы event.preventDefault() и event.stopImmediatePropagation() или return false:

$(document).bind('keydown', 'Ctrl+s', function(event) { 
    event.preventDefault(); 
    event.stopImmediatePropagation(); 
    alert('saving?'); 
    return false; 
}); 

Bin

event.preventDefault() само по себе достаточно, чтобы предотвратить save dialog, если нет alert s, теперь с предупреждением можно предотвратить действие по умолчанию.

+2

Да, вы правы, выглядит как предупреждение должно быть первым, что нужно стрелять. – Talon

+1

@Talon Я считаю, что это скорее ошибка предупреждения Firefox. Раньше я запускал проблемы с предупреждениями, так как они не синхронизированы на 100%. См. Этот [тестовый пример] (http://jsbin.com/ecubot/9/edit). –

+2

Прохладный один чувак. Помог мне много. Спасибо :) –

1

Это работает для меня:

<script> 
     $(document).bind('keypress', 'Ctrl+s', 
      function (event) { 
       event.preventDefault(); 
       alert('saving?'); 
      }); 
</script> 
+0

Да, он работает в Firefox, но сейчас перерывы в Chrome. '=]' –

+0

Да, это тоже работает, похоже, что я опасался предотвращения дефолта до конца. – Talon

Смежные вопросы