Javascript 如何设置聚焦于单击的元素?

Javascript 如何设置聚焦于单击的元素?,javascript,jquery,Javascript,Jquery,基本上,我有一个HTML5视频元素,点击时我需要使它成为焦点,这样我就可以控制用户键盘触发器 这是我的密码: $(function(){ var focused_vid; $('.videoe').click(function(){ focused_vid = this }); $(document).keydown(function(e){ if (focused_vid){ // keyboard handler

基本上,我有一个HTML5视频元素,点击时我需要使它成为焦点,这样我就可以控制用户键盘触发器

这是我的密码:

$(function(){
    var focused_vid;
    $('.videoe').click(function(){ focused_vid = this });
    $(document).keydown(function(e){ 
        if (focused_vid){
            // keyboard handler
        }
    });
});
在我的视频元素旁边有一个文本框。问题是,一旦视频被聚焦,它将禁止我在文本框中键入内容,并不断触发视频处理程序的按键,即使我:

$(window).click(function(e) {
    $(e.srcElement.className).focus();
});

注意:)

不要使用
event.srcmelement
这是Firefox不支持的非标准IE属性。使用所有现代浏览器都支持的
event.target
。尝试使用
.blur()
方法将
焦点从视频中移开。请参阅代码片段,以了解如何实现这一点

片段

$(函数(){
var聚焦视频;
$('#vid1')。单击(函数(){
聚焦视频=此
});
$(文档).keydown(函数(e){
如果(聚焦视频){
log('focused on'+e.target.className);
}
});
});
$(窗口)。单击(函数(e){
$('#vid1').blur();
var tgt=e.target;
$(tgt.focus();
log('focused on'+tgt.className);
});
/*这只是为了防止控制台遮挡演示*/
输入{
显示:块;
}
.as-console-wrapper.as-console-wrapper{
左边距:270px;
最大宽度:250px;
高度:100vh;
颜色:蓝色;
字体:400 15px/1.3控制台;
}

不要使用
event.srcement
这是Firefox不支持的非标准IE属性。使用所有现代浏览器都支持的
event.target
。尝试使用
.blur()
方法将
焦点从视频中移开。请参阅代码片段,以了解如何实现这一点

片段

$(函数(){
var聚焦视频;
$('#vid1')。单击(函数(){
聚焦视频=此
});
$(文档).keydown(函数(e){
如果(聚焦视频){
log('focused on'+e.target.className);
}
});
});
$(窗口)。单击(函数(e){
$('#vid1').blur();
var tgt=e.target;
$(tgt.focus();
log('focused on'+tgt.className);
});
/*这只是为了防止控制台遮挡演示*/
输入{
显示:块;
}
.as-console-wrapper.as-console-wrapper{
左边距:270px;
最大宽度:250px;
高度:100vh;
颜色:蓝色;
字体:400 15px/1.3控制台;
}

它可能也会帮助其他人

var focused_vid=null;
$(function(){
    $('.videoe').click(function(){ focused_vid = this });
    $(document).keydown(function(e){ 
        if (focused_vid){
            // keyboard handler
        }
    });
});

function notfocused(){
    focused_vid=null;
}
稍后我们可以调用
notfocused
方法来删除视频处理键盘按钮

$(document).click(function(e) {
    $('.videoe').blur();
    var tgt = e.target;
    $(tgt).focus();
    if(tgt.className!="videoe")
        notfocused();
});

它可能也会帮助其他人

var focused_vid=null;
$(function(){
    $('.videoe').click(function(){ focused_vid = this });
    $(document).keydown(function(e){ 
        if (focused_vid){
            // keyboard handler
        }
    });
});

function notfocused(){
    focused_vid=null;
}
稍后我们可以调用
notfocused
方法来删除视频处理键盘按钮

$(document).click(function(e) {
    $('.videoe').blur();
    var tgt = e.target;
    $(tgt).focus();
    if(tgt.className!="videoe")
        notfocused();
});

您的
$(窗口)中的
e
。未定义单击。因此,回调最有可能在单击时抛出错误,
e
即使不是,也不会成为单击事件。@t.niese仍然无法在
$(窗口)中运行
e
。未定义单击。因此,回调很可能在单击时抛出错误,即使不是,
e
也不会是单击事件。@t.niese仍然不能很好地处理elements focus,但它仍然作为视频处理程序触发按钮。我忘了删除
tabindex
属性。如果删除它们不能修复该行为,您是否可以发布
结束的事件的事件处理程序?你可能忽略了一些东西,一组新鲜的眼睛(我的眼睛实际上是充血的)可能会发现一些东西。这对elements focus有效,但它仍然作为视频处理程序触发按钮。我忘了删除
tabindex
属性。如果删除它们不能修复该行为,您是否可以发布
结束的事件的事件处理程序?也许你忽略了一些东西,一双新鲜的眼睛(我的眼睛实际上是充血的)可能会发现一些东西。