[javascript] JQuery로 CTRL + S를 캡처하는 가장 좋은 브라우저 간 방법?

사용자가 Ctrl+ S를 눌러 양식을 저장하려고합니다. Ctrl+ S키 조합 을 캡처하고 양식을 제출 하는 브라우저 간 좋은 방법이 있습니까?

앱은 Drupal을 기반으로하기 때문에 jQuery를 사용할 수 있습니다.



답변

$(window).keypress(function(event) {
    if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true;
    alert("Ctrl-S pressed");
    event.preventDefault();
    return false;
});

키 코드는 브라우저마다 다를 수 있으므로 115 개 이상을 확인해야 할 수도 있습니다.


답변

이것은 jquery를 사용하여 Ctrl+ S, Ctrl+ FCtrl+ 를 오버로드하는 데 효과적입니다 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;
        }
    }
});


답변

바로 가기 라이브러리 를 사용하여 브라우저 별 항목을 처리 할 수 있습니다 .

shortcut.add("Ctrl+S",function() {
    alert("Hi there!");
});


답변

이 jQuery 솔루션은 Chrome 및 Firefox에서 Ctrl+ SCmd+ 모두 작동합니다 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;
}); 


답변

이것은 몇 가지 이유에 대한 … 크롬에 나를 위해 일 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속성을 사용하십시오 . 기존 브라우저 기능을 중단하지 마십시오.