我在之前的帖子中重新提出这个问题,因为当我最初提出这个问题时,目前还不清楚。我不确定我实际需要什么,这导致我的反应不适用。
原文: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();};
感谢任何帮助/建议。
答案 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进行硬编码。