【问题标题】:How to find a dynamically-generated HTML element?如何找到动态生成的 HTML 元素?
【发布时间】:2010-07-22 19:21:11
【问题描述】:

当我的 RadGrid 离开编辑模式时,我需要获取 RadComboBox 的客户端实例(或新选择的 RadComboBox 值),以便我可以将更改的值回传到服务器。

问题是,对象的客户端 id 总是在变化。此外,RadComboBoxes 不是在运行时创建的——它们仅在用户双击我的 RadGrid 的特定行后创建。因此,语法如

var SundayLoc = $find("<%= FieldOpsScheduler_ctl00_ctl05_RCB_SunLocale.ClientID %>");

等于失败。在我开始改变价值观之前,我能够侥幸逃脱:

var SundayLoc = $find("FieldOpsScheduler_ctl00_ctl05_RCB_SunLocale");

这每次都能完美运行,直到我添加了一些行分隔符对象,这些对象现在导致 id 的“ctl05”始终根据用户进入编辑模式的行而改变。我已尝试使用所有获取此对象及其值的事项,但无济于事。

我打算尝试使用正则表达式,直到在阅读 bobince 在RegEx match open tags except XHTML self-contained tags 的社区 wiki 回答后,我才意识到用正则表达式解析 HTML 的诱惑是邪恶的撒旦-spawn 的工作(那个和经过进一步研究,我得出结论,正则表达式可能对我没有帮助)。

无论如何,如果有人能以我的方式提出一些想法,我将不胜感激。提前谢谢你。

【问题讨论】:

    标签: javascript telerik radgrid radcombobox


    【解决方案1】:
    • 在服务器端创建某种列表以跟踪控件 ID
    • 无论出于何种原因呈现页面时,将这些 id 写在脚本块中(将它们放入数组或其他任何内容中)
    • 当您需要提交您的值时,您可以使用 javascript 数组内容来引用控件。

    您可能需要做更多的工作才能找到您的实际值。对于 ingragistics 的花式裤子控件,它们提供了一种特殊的方法来获取有关“控件”整体的信息。 rad 控件可能有类似的东西。

    【讨论】:

    • 项目符号 1 和 2 不起作用,因为 RadComboBoxes 的控件 ID 不是在运行时生成的——一旦我的 RadGrid 进入编辑模式,它们是从一些 GridDropDownListColumnEditor 对象生成的。 Bullet 3 可能会起作用,但是即使在使用 FireBug 之后,我也不确切知道三个标签中的哪一个正在存储我需要的值(在我的例子中,RadComoBox 似乎生成了三个 HTML 标签,当我尝试返回时,它们似乎都没有存储值它与jQuery)。
    • 感谢您的回复,但我想在再次查看我所有的 JavaScript 之后,我实际上已经想出了一个答案(不是很雄辩,但可靠)。测试完我会发布的。
    • 原来我的答案没有像我希望的那样工作......继续寻找答案(明天)!
    【解决方案2】:

    好的,所以我最终得出的答案并不是很有说服力,但它是 100% 可靠的,并且全部在客户端(这很好,因为我的公司将 IE7 作为其标准 Web 浏览器 x_x)。

    我能够摆脱一堆 $find 命令和 if 语句,因为我不再需要搜索特定的 HTML id。

            function SelectedIndexChanged(sender,eventArgs)
            {
                var rcbID = sender.get_id();
                var LocID = rcbID.substring(0,37) + "Locale";
                pastCombo = currentCombo;
                currentCombo = eventArgs.get_item().get_text();
    
                if(editedRow != null)
                {
                    var Location = $find(LocID);
    

    由于 id 不是在服务器端生成的(据我所知,尽管我承认我没有尝试 Roatin 的解决方案,因为在我看到他的答案之前我就想到了我的解决方案 + 我的似乎更简单,因为我已经在 J​​avaScript 中做了大量的客户端工作),我环顾四周看看我已经得到了什么,并意识到 var rcbID = sender.get_id(); 已经给我带来了与我已经在寻找的非常相似的价值(只是代替它说 SunLocale,它说 SunActivity)。

    所以我想,嘿,我可以 substring() 删除 rcbID 中的所有内容,然后将“Locale”附加到它,然后对其运行 $find() 命令以获得正确的 RadComboBox。事实证明它有效。无论如何,尽管我确实感谢你们调查我的问题,尽管我最终找到了自己的解决方案。 :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 2023-02-20
      • 1970-01-01
      相关资源
      最近更新 更多