【问题标题】:Getting value of next node using jQuery使用jQuery获取下一个节点的值
【发布时间】:2012-04-12 08:41:21
【问题描述】:

使用 jQuery 获取行的下一个节点的最快方法是什么?这是TreeList 的生成标记,它是GridView asp.net 的一种类型。我必须获得lblWorkItemId,即199。请考虑这是来自绑定控件。

<tr id="ctl00_PageContent_rtlRshItems_ctl04__2" class="rtlR rtlRL" style="background-color:Lavender;">

<td align="left" valign="middle" style="width:90px;">
    <div id="ctl00_PageContent_rtlRshItems_ctl04_rcbStatut" class="RadComboBox RadComboBox_Windows7">
        <table class="rcbFocused" style="border-width: 0pt; border-collapse: collapse;" summary="combobox">
            <tbody>
                <tr class="rcbReadOnly">
                    <td class="rcbInputCell rcbInputCellLeft" style="width:100%;">
                        <input id="ctl00_PageContent_rtlRshItems_ctl04_rcbStatut_Input" class="rcbInput" type="text" readonly="readonly" value="Submitted" name="ctl00$PageContent$rtlRshItems$ctl04$rcbStatut" autocomplete="off">
                    </td>
                    <td class="rcbArrowCell rcbArrowCellRight">
                        <a id="ctl00_PageContent_rtlRshItems_ctl04_rcbStatut_Arrow" style="overflow: hidden;display: block;position: relative;outline: none;">select</a>
                    </td>
                </tr>
            </tbody>
        </table>

        <input id="ctl00_PageContent_rtlRshItems_ctl04_rcbStatut_ClientState" type="hidden" name="ctl00_PageContent_rtlRshItems_ctl04_rcbStatut_ClientState" autocomplete="off">
    </div>
</td>

<td class=" rtlCL" style="width:0px;">
    <asp:label id="lblWorkItemId" text="199" visible="false"> </asp:label>
</td>

当组合框的选定值更改为某个值时,将调用以下javascript方法:

    function OnClientSelectedIndexChanged(sender, eventArgs) {
        var item = eventArgs.get_item();
        if (item.get_text() == "Refused") {
            var treeList = $find("<%= rtlRshItems.ClientID %>");
            // var workItemId = [...]
            OpenReasonWindow(workItemId);
        }
    }

【问题讨论】:

  • 你看过.next()吗? api.jquery.com/next
  • 详述 Adam 的评论...$(this).next('#lblWorkItemID').text(); 将 DOM 迭代到 ID 为 lblWorkItemID 的下一个元素并获取它的文本,$(this) 是指您更改的元素你的功能,看起来像一个选择列表控制器。应该是你需要的。
  • @Ohgod 如果那不是直接兄弟,为什么不这样做。给定标记并假设在输入上触发事件,最好向上到包含行并在匹配的 id 上使用 find。请注意,该 id 可能会被 ASP.NET 修改,因为它位于控件中。
  • @Ohgodwhy,这会返回一个空字符串...
  • 您的标记有些不一致。第一个td 看起来像从浏览器源复制粘贴,但在下一个包含asp:label 元素。您是否混合使用客户端源代码和 aspx 标记?如果是这样,请注意,当您将 Web 控件 Visible 属性设置为 false 时,它不会呈现在页面上。如果您不需要显示它,使用asp:HiddenField 控件而不是Label 可能会更好。

标签: javascript jquery asp.net asp.net-ajax telerik


【解决方案1】:

使用您的代码模板:

    function OnClientSelectedIndexChanged(sender, eventArgs) {
        var item = eventArgs.get_item();
        if (item.get_text() == "Rejetée") {
            var combo = $('input[id*="rcbStatut_Input"]')
            var workItemId = combo.closest('tr.rtlRL').find('[id$="lblWorkItemId"]').attr('text');
            OpenReasonWindow(workItemId);
        }
    }

注意:我通常会不显眼地应用这种处理程序,而不是标记。

【讨论】:

  • 其实treeList 是针对整个网格的...如何获取当前行?
  • @JFB - 那么item 是什么?是输入改变了吗?在这个假设下查看我的更新。
  • 很抱歉让您感到困惑。 item 是已从下拉列表中选择的 RadComboBox 项。
  • @JFB - 从标记看来,这将是输入元素。试试我现在的方法,看看它是否不起作用。
  • 查看此处了解有关item 的更多信息:telerik.com/help/aspnet-ajax/…
猜你喜欢
  • 2011-09-07
  • 2013-06-29
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2012-12-22
相关资源
最近更新 更多