0

我从之前的帖子中重新发布了这个问题,因为当我最初问这个问题时,还不清楚。我不确定我真正需要什么,这导致我得到的回应不适用。

原文:YUI Datatable - 在页面加载后获取 DOM 元素的 ID 并在其他 YUI 事件中使用它


我的问题是这样的:

我有一个 YUI 数据表。我每页有一行下拉菜单。我需要创建一个事件或事件处理程序,或利用一个现有的,它将处理以下内容:

当(曾经)显示每页行的下拉列表发生更改时,事件处理程序应该获取该下拉列表的 id 并将其传递给另一个函数以用作参数。我的数据表有两个 rowsPerPageDropDown(又名 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();

据我所知,此事件仅在页面最初加载时触发/处理。那时,第一个警报按预期提示“hello world”。第二个警报显示“未定义”。目的是第二个警报应该提醒任何 rppDD 元素的 id 是(“yui-pg0-0-rpp12”)。

作为参考,我计划将 id 传递给的函数如下。正如我上面提到的,将 [the|either|both] 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 回答