我的用户希望能够点击Ctrl+S来保存表单。是否有一种很好的跨浏览器方式来捕获Ctrl+S键组合并提交我的表单?
应用程序是基于 Drupal 构建的,因此可以使用 jQuery。
我的用户希望能够点击Ctrl+S来保存表单。是否有一种很好的跨浏览器方式来捕获Ctrl+S键组合并提交我的表单?
应用程序是基于 Drupal 构建的,因此可以使用 jQuery。
这对我有用(使用 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;
}
}
});
$(window).keypress(function(event) {
if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true;
alert("Ctrl-S pressed");
event.preventDefault();
return false;
});
不同浏览器的密钥代码可能不同,因此您可能需要检查的不仅仅是 115。
您可以使用快捷方式库来处理浏览器特定的内容。
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;
});
这个在 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,我会很高兴听到,如果有人在其他浏览器上测试这个,我会很高兴听到它是否有效