YUI数据表:rowsPerPageChage事件:在更改时获取下拉ID

时间:2012-09-12 14:15:11

标签: event-handling datatable yui

我在之前的帖子中重新提出这个问题,因为当我最初提出这个问题时,目前还不清楚。我不确定我实际需要什么,这导致我的反应不适用。

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


我的问题是:

我有一个YUI数据表。我每页有一行下拉。我需要创建一个事件或事件处理程序,或者使用一个存在的事件,它将处理以下事件:

当(每次)显示每页行数的下拉列表发生变化时,事件处理程序应获取该下拉列表的id并将其传递给另一个函数以用作参数。我的数据表有两行PerPageDropDown(又名rppDD)元素。我需要这两个功能。

最好在页面加载时执行此操作,但现在这是额外的功劳。

我知道“top”rppDD元素的id目前是“yui-pg0-0-rpp12”,但我的问题来自这样一个事实:如果我向这个页面添加任何代码,那个id将会改变(到“ - rpp13“或类似的东西)。这抛弃了我的其余功能。所以我想在运行时抓住id(无论它是什么)并以这种方式使用它而不是硬编码。

第二个函数将在下拉更改后立即运行。它将使用下拉列表的id来获取当前选定的值,并将其分配给要与第三个函数一起使用的变量。


这是我到目前为止的内容:在早期的帖子中,有人建议我使用事件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();

近,因为我可以告诉这个事件只在页面最初加载时触发/处理。那时,第一个警报按预期警告“你好世界”。第二个警报显示“未定义”。目的是第二个警报应警告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 个答案:

答案 0 :(得分: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进行硬编码。