0

此代码应在每个锚点、按钮和输入元素旁边创建小编号标签。然后它在这些标签上设置点击事件。我已经删除了按钮和锚标记的代码,因为它可以工作并且不相关。

但是,对于输入,应该将光标放在输入元素中,使用该.focus()方法实现。

但是当我在控制台中针对登录的 gmail.com 运行它时,它什么也不做。注释的alert()语句将返回[Object HTMLSpanElement],无论这意味着什么。如果我取消注释以直接document.getElementById关注搜索栏,它就可以工作。为什么它不能使用?this

我只是将 gmail 用于测试示例,但这种行为出现在所有页面上,错误始终存在。您可以包含 jQuery 以在控制台中使用this进行测试。

var n = 1;
$('a,button,input').each(function(){
                        id = n;
                   //creates numbered tags next to 'a', 'button' and 'input' elements
                        var a = $(this).offset();
                        $('body').append('<span class="numTag" id="' + id + '" style="background:white; border: 1px solid black; font-size: 10pt; position:absolute; z-index:999;">' + id + '</span>');
                        $('#'+id).css({left: a.left - 25, top: a.top});
                        switch( this.tagName)
                        {
                        case 'A':
                            break;
                        case 'BUTTON':
                            break;
                        case 'INPUT':
                            $('#'+id).click(function(){
                                //alert(this);
                                this.focus();
                                //document.getElementById('gbqfq').focus();
                            });
                            break;
                        }
                        n++;
                    }
                });
4

1 回答 1

2

您将失去this对 click 事件内部的访问权限。存储对它的引用,以便您以后可以访问它。

var self = this;
$('#'+id).click(function(){
    //alert(self);
    self.focus();
    //document.getElementById('gbqfq').focus();
});
于 2013-10-23T22:15:48.990 回答