2

ListBox2次元配列を取り、固定の列タイトルとスクロール可能なコンテンツを含むテーブルに出力し、列タイトルをクリックすることで並べ替え可能なJavaScriptオブジェクトをまとめています。HTMLにオブジェクト自体のメソッドを呼び出すイベントハンドラーを含めるには、オブジェクトが独自のインスタンス変数名を知っている必要があります。

var MyList = new ListBox();

列とコンテンツを設定した後、適切なメソッドがHTMLを生成します...

...
<td class="ListBox_ColumnTitle" onclick="MyList.SortByColumn(1)">...</td>
...

ここでstackoverflowを検索すると、次のコードが見つかり、オブジェクトの適切なインスタンスが見つかるように少し調整しました。

for (var v in window) {
    try {
        if (window[v] instanceof ListBox) { InstanceName = v; break; }
        }
    catch (e) { }
    }

ただし、これはコンストラクター関数内では機能しません。インスタンスが見つからないだけです。後で問題なく動作しますが、コンストラクター内でそれを実行して、ListBoxを使用しているコードを単純化できるようにしたいと思います-これは可能ですか?

また、コンストラクターのパラメーターとして変数名を渡す方がはるかに簡単であることも理解していますが、可能であればこれは避けたいと思います。

4

2 に答える 2

2

属性を出力せずにスクリプトでイベントをバインドすることにより、この問題を完全に回避できonclickます。

function ListBox() {
    var that = this;

    // do your existing stuff

    var element = ...; // whatever you're currently doing to create the html
    element.onclick = function () {
        that.SortByColumn(1);
    };
}
于 2012-06-27T18:46:21.903 に答える
0

しないでください。変数の名前を取得しようとしないでください。

代わりに、オブジェクトとそれらへの参照を使用する必要があります。HTML(文字列)ではなく、DOM要素(オブジェクト)を生成する必要があります。スコープ内で自分だけがアクセスできるイベントリスナーとして、関数を簡単に割り当てることができます。

于 2012-06-27T18:49:37.637 に答える