Как мне дать холсту HTML фокус клавиатуры, используя jquery?

Что-то вроде этого должно достичь вашей цели:

function RecurseDirs
{
    oldIFS=$IFS
    IFS=$'\n'
    for f in "$@"
    do
    -----your activity here-----
        if [[ -d "${f}" ]]; then
            cd "${f}"
            RecurseDirs $(ls -1 ".")
            cd ..
        fi
    done
    IFS=$oldIFS
}
13
задан Steve Hanov 1 December 2009 в 23:06
поделиться

2 ответа

Основная проблема в том, что по умолчанию браузер не делает холст «фокусируемым». Лучший обходной путь, который я мог придумать, - это установить tabindex на холсте:

$("#canvas")
    // Add tab index to ensure the canvas retains focus
    .attr("tabindex", "0")
    // Mouse down override to prevent default browser controls from appearing
    .mousedown(function(){ $(this).focus(); return false; }) 
    .keydown(function(){ /* ... game logic ... */ return false; });

Если по какой-либо причине вы не можете установить tabindex , вы также можете сделать холст "фокусируемый", установив для contentEditable значение true:

// Add content editable to help ensure the canvas retains focus
$("#canvas").attr("contentEditable", "true")
$("#canvas")[0].contentEditable = true;

Это решение, которое я придумал изначально, но, на мой взгляд, оно немного сложнее, чем опция tabindex .

Также следует учитывать, что браузеры обычно выделяют редактируемые элементы содержимого рамкой. Некоторых пользователей это может оттолкнуть. К счастью, вы можете избавиться от этого с помощью этого фрагмента CSS:

#canvas { outline: none; }

I ' Мы тестировали оба решения в Chrome 3/4/5 и FireFox 3.0 / 3.5 / 3.6 в Windows XP, Mac OSX и Linux. Вот рабочий пример: http://xavi.co/static/so-canvas-keyboard.html

33
ответ дан 1 December 2019 в 19:23
поделиться

Try event.preventDefault();. Also there are keypress, keydown, and keyup events... you could try each of them to see which works.

3
ответ дан 1 December 2019 в 19:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: