【问题标题】:YUI Datatable: rowsPerPageChage Event: Get Drop Down ID on changeYUI 数据表:rowsPerPageChage 事件:在更改时获取下拉 ID
【发布时间】:2012-09-12 14:15:11
【问题描述】:

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

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


我的问题是这样的:

我有一个 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();};

感谢任何帮助/建议。

【问题讨论】:

    标签: event-handling datatable yui


    【解决方案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 进行硬编码。

    【讨论】:

    • 是的。我还需要把它包装在这个里面:function Rdy(id){ YAHOO.util.Event.onContentReady(id, this.handleOnAvailable, this); }; Rdy.prototype.handleOnAvailable = function(me){**above answer goes here**};
    猜你喜欢
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    相关资源
    最近更新 更多