1

我尝试将其用于一个简单的热键功能,该功能会对某些键的按键做出反应,但如果您在具有给定 ID 的框中进行编辑,则不会。不幸的是,现在热键总是被禁用。我一直收到 alert() :(

文本字段在例如http://tyrant.40in.net/kg/news.php?id=160#comments

在文本区域内它可以工作,但我的脚本无法识别,无论我是在文本区域内还是在外部(单击文本区域并单击外部也无济于事)。

请帮我。

我还尝试通过选择 (!$('#tfta_1 #search')) 而不是 $('html') 以另一种方式来执行此操作,这样当您使用这些 ID 时,热键将不起作用。不幸的是,这并没有起作用。

编辑:js还必须检查crtl、alt、shift以避免解释

// Hotkeys (listen to keyboard input)
$('html').keypress(
    function(event){

        // is cursor at the beginning / end of edit box
        var textInput = document.getElementById("tfta_1"), val = textInput.value;
        var isAtStart = false, isAtEnd = false;
        if (typeof textInput.selectionStart == "number") {
            // Non-IE browsers
            isAtStart = (textInput.selectionStart == 0);
            isAtEnd = (textInput.selectionEnd == val.length);
        } else if (document.selection && document.selection.createRange) {
            // IE branch
            textInput.focus();
            var selRange = document.selection.createRange();
            var inputRange = textInput.createTextRange();
            var inputSelRange = inputRange.duplicate();
            inputSelRange.moveToBookmark(selRange.getBookmark());
            isAtStart = inputSelRange.compareEndPoints("StartToStart", inputRange) == 0;
            isAtEnd = inputSelRange.compareEndPoints("EndToEnd", inputRange) == 0;
            }
        // combine information -> is cursor in edit box?
        var eb = isAtStart + isAtEnd;
        // if in comment box
        if ( eb ) {
            // do nothing
            alert('You are in the comment box');
        }
        // if key 'p' is pressed
        else if (event.which == 112){
            // open profile page
            window.location = home + 'profile.php';
        }
        // if key 'q' is pressed
        else if (event.which == 113){
            // open quests overview
            window.location = home + 'quests.php';
        }
        // if key 'r' is pressed
        else if (event.which == 114){
            // open raids overview
            window.location = home + 'raids.php';
        }
        // if key 'f' is pressed
        else if (event.which == 102){
            // open fraction tracker
            window.location = home + 'factiontracker.php';
        }       
    }
);
4

1 回答 1

2

你需要检查event.target财产。

if ('textarea' == event.target.tagName.toLowerCase()) {
    return;
}

或者:

if ($(event.target).is('textarea')) {
    return;
}

至于修饰键,请参见event.shiftKeyevent.ctrlKeyevent.altKey

于 2012-12-20T14:31:51.237 回答