2012-09-12 32 views
0

我從前一篇文章轉發此問題,因爲當我最初問它時,它不清楚。我不確定我實際需要什麼,導致我的反應變得不適用。YUI Datatable:rowsPerPageChage事件:獲取下拉ID在更改

原文:YUI Datatable - Get ID of DOM Element after page has loaded and use it in other YUI events


我的問題是這樣的:

我有一個YUI的數據表。我每行都有一行下拉菜單。我需要創建一個事件或事件處理函數,或利用存在的函數來處理以下事件:

當(每次)顯示每頁行數的下拉列表發生更改時,事件處理程序應該獲取下拉並將其傳遞給另一個函數以用作參數。我的數據表有兩個rowPerPageDropDown(aka rppDD)元素。我需要這兩個功能。

優選地,它也會在頁面加載時執行此操作,但現在這是額外的功勞。

我知道「top」rppDD元素的id當前是「yui-pg0-0-rpp12」,但是我的問題從這樣一個事實延伸出來,如果我向該頁面添加任何代碼,該id將會改變(「 -rpp13「或類似的東西)。這拋棄了我的其他功能。所以我想在運行時只是抓住id(不管它是什麼),並用它來代替硬編碼。

第二個函數會在下拉改變後立即運行。它將使用下拉列表的ID來獲取當前選定的值,並將其分配給一個變量以與第三個函數一起使用。


這是我到目前爲止:在前面的線程中,有人建議我使用事件rowsPerPageChange。這隻在一定程度上起作用。在該事件處理程序中放置一個簡單的「hello world」警報,證明它僅在頁面加載時發出警報。每當我點擊並更改下拉到其他東西,它不再提醒。

下面是函數(S)和代碼,我使用測試:

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」。第二個提示顯示「未定義」。其意圖是第二次警報應該提醒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();}; 

任何幫助/建議表示讚賞。

回答

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。

+0

是的。我也需要在這裏麪包裝: 'function Rdy(id){ YAHOO.util.Event.onContentReady(id,this.handleOnAvailable,this); }; Rdy.prototype.handleOnAvailable = function(me){**上面的答案在這裏**};' – quotemyname