0

最初に質問したときに不明確だったため、以前の投稿からこの質問を再投稿します。実際に何が必要なのかわからなかったので、得られた回答が当てはまりませんでした。

オリジナル: YUI Datatable - ページが読み込まれた後に DOM 要素の ID を取得し、他の YUI イベントで使用する


私の質問はこれです:

YUI Datatable があります。ページごとの行のドロップダウンがあります。以下を処理するイベントまたはイベント ハンドラーを作成するか、存在するものを利用する必要があります。

ページごとの行を表示するドロップダウンが変更されると、イベントハンドラーはそのドロップダウンの ID を取得し、それを別の関数に渡して引数として使用する必要があります。私のデータテーブルには 2 つの rowsPerPageDropDown (別名 rppDD) 要素があります。両方にこの機能が必要です。

ページのロード時にもこれを行うことが望ましいですが、今のところは余分なクレジットです。

「トップ」の rppDD 要素の ID が現在「yui-pg0-0-rpp12」であることはわかっていますが、このページにコードを追加すると、その ID が (「-rpp13」または似たような)。それは私の機能の残りを捨てます。そのため、ハードコーディングするのではなく、実行時にID(それが何であれ)を取得して、そのように使用したいと考えています.

2 番目の関数は、ドロップダウンが変更された直後に実行されます。ドロップダウンの ID を使用して現在選択されている値を取得し、それを変数に割り当てて、3 番目の関数で使用します。


これまでのことは次のとおりです。 前のスレッドで、rowsPerPageChange イベントを使用するよう提案されました。これはある程度しか機能しません。そのイベント ハンドラー内に単純な "hello world" アラートを配置すると、ページが読み込まれたときにのみアラートが発生することが証明されます。クリックしてドロップダウンを別のものに変更すると、アラートが表示されなくなります。

以下は、これをテストするために使用している関数とコードです。

var getRppValue = function() {
    YAHOO.util.Event.addListener("rowsPerPageChange", getRppValue.prototype.handleOnAvailable()); 
}

var rppDD_ID = "";

getRppValue.prototype.handleOnAvailable = function() {
    alert("hello world");
    alert(this.id); //should alert "yui-pg0-0-rpp12"
    //rppValue = this.id;
}

var rppEvent = new getRppValue();

このイベントは、ページが最初に読み込まれたときにのみ発生/処理されることがわかります。そのとき、最初のアラートは予想どおり「hello world」をアラートします。2 番目のアラートには「未定義」が表示されます。その意図は、2 番目のアラートが、rppDD 要素の ID ("yui-pg0-0-rpp12") が何であれアラートを出すことです。

参考までにidを渡す予定の関数は以下の通りです。[|どちらか|両方] rppDD 要素の現在の値を変数 oRPP に割り当てることは、上で述べたように意図されています。次に endDrag() 関数 (oRPP を使用) を呼び出します。

ID をハードコードするとしたら、次のようになります。

function getRPP_0(){oRPP = g("yui-pg0-0-rpp12").value;endDrag();};

私はそれを動的にしたい:

function getRPP_0(){oRPP = g(rppDD_ID).value;endDrag();};

ヘルプ/提案をいただければ幸いです。

4

1 に答える 1

1

チャットで見たように、あなたはこれを持っていました:

var onRPPChange0 = YAHOO.util.Event.addListener("yui-pg0-0-rpp12", "change", getRPP_0); 
var onRPPChange1 = YAHOO.util.Event.addListener("yui-pg0-1-rpp24", "change", getRPP_1); 
function getRPP_0(){oRPP = g("yui-pg0-0-rpp12").value;endDrag();}; 
function getRPP_1(){oRPP = g("yui-pg0-1-rpp24").value;endDrag();};

そして、関数で変更されている要素にアクセスできるようにしたいと考えていました。

幸いなことに、イベント ハンドラーは、オブジェクト内でイベントが発生している要素を提供しthisます。

したがって、これは機能します:

var onRPPChange0 = YAHOO.util.Event.addListener(
    "yui-pg0-0-rpp12", "change", function() {

    // Notice that "this" is the element on which the event was fired
    oRPP = this.value;

    endDrag();
};

このようにして、ID をハードコーディングすることなく、関数を簡単に一般化できます。

于 2012-09-18T20:21:57.973 に答える