0

このコードは、各アンカー、ボタン、および入力要素の横に小さな番号付きのタグを作成する必要があります。次に、それらのタグでクリック イベントを設定します。ボタンとアンカー タグのコードは動作し、関連がないため、削除しました。

.focus()ただし、入力の場合は、カーソルを入力要素に配置し、メソッドを使用して実現する必要があります。

しかし、ログインしている gmail.com に対してコンソールでこれを実行すると、何もしません。コメントされalert()たステートメントは[Object HTMLSpanElement]、それが何を意味するにせよ、を返します。行のコメントを外して検索バーに直接document.getElementByIdフォーカスすると、機能します。を使用しても機能しないのはなぜですか?this

テストの例としてgmailを使用していますが、この動作はすべてのページで発生し、バグは常に存在します。thisを使用してコンソールでこれをテストするために jQuery を含めることができます。

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クリック イベント内にアクセスできなくなります。後でアクセスできるように、参照を保存します。

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