1

コードをより汎用的にする変数を作成したいと考えています。ここに私が取り組んでいるコードがあります:

eventHandler: function(event) {
    if (event.keyCode == KEY_DOWN) {
        if (this.hasNextSibling(document.activeElement.parentNode)) {
             this.setFocus(document.activeElement.parentNode.nextSibling.firstChild);
         } else {
              this.debug("out");
         }
    }
},
setFocus: function(item)
{
document.activeElement.tabIndex = "-1";
item.focus();
document.activeElement.tabIndex = "0";
},
...

「document.activeElement.parentNode.nextSibling.firstChild」がある部分が問題です。コードを再利用できるようにするために、最初にやりたいことは、次のような変数を設定することです。

var test = document.activeElement.parentNode.nextSibling.firstChild; /*CHANGE HERE*/
eventHandler: function(event) {
    if (event.keyCode == KEY_DOWN) {
        if (this.hasNextSibling(document.activeElement.parentNode)) {
             this.setFocus(test); /*CHANGE HERE*/
         } else {
              this.debug("out");
         }
    }
},
setFocus: function(item)
{
document.activeElement.tabIndex = "-1";
item.focus();
document.activeElement.tabIndex = "0";
},
...

コードはコンパイルされません。メソッド参照など、さまざまなアプローチを試しましたが、何もうまくいかないようです。誰にもアイデアはありますか?

どうもありがとう

編集:ここに私が実際に欲しいものがあります:

var x = parentNode.nextSibling.firstChild;
eventHandler: function(event) {
    if (event.keyCode == KEY_DOWN) {
        if (this.hasNextSibling(parent)) {
             this.setFocus(document.activeElement.x);
         } else {
              this.debug("out");
         }
    }
},
setFocus: function(item)
{
document.activeElement.tabIndex = "-1";
item.focus();
document.activeElement.tabIndex = "0";
},

セマンティックが正しくありません。それを行う方法はありますか?ありがとう

4

2 に答える 2

0

キーが押されるたびにactiveElementが同じではないため、関数の外に保持する意味はありません。あなたの編集された答えについて、私が考えることができる唯一の方法は、あなたのコードは

var x = "parentNode.nextSibling.firstChild";//edited here
eventHandler: function(event) {
    if (event.keyCode == KEY_DOWN) {
        if (this.hasNextSibling(parent)) {
             this.setFocus(eval("document.activeElement." + x));//edited here
         } else {
              this.debug("out");
         }
    }
},
setFocus: function(item)
{
document.activeElement.tabIndex = "-1";
item.focus();
document.activeElement.tabIndex = "0";
},
于 2012-11-13T18:05:40.167 に答える
0

問題は、キーと値のペアのみが有効なオブジェクトの本体内で変数を宣言しようとしていることです。試す:

test : document.activeElement.parentNode.nextSibling.firstChild,
eventHandler: function(event) {
    if (event.keyCode == KEY_DOWN) {
        if (this.hasNextSibling(document.activeElement.parentNode)) {
             this.setFocus(this.test); /*CHANGE HERE*/
         } else {
              this.debug("out");
         }
    }
},
...
于 2012-11-13T20:08:30.470 に答える