2010-07-22 49 views
0

当我的RadGrid离开编辑模式时,我需要获取RadComboBox的客户端实例(或RadComboBox的新选定值),以便我可以将更改后的值发布回服务器。如何查找动态生成的HTML元素?

问题是,对象的客户端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让我意识到,用正则表达式解析HTML的诱惑是邪恶的撒旦产生的工作(那个和之后进一步的研究我得出结论,正则表达式可能不会帮助我)。

无论如何,如果有人可以用我的方式抛出一些想法,我会非常感激。先谢谢你。

回答

0

好的,我最终提出的答案并不是真正的雄辩,但它是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); 

由于IDS没有被服务器端生成(据我所知,但无可否认我没有尝试Roatin的解决办法,因为我还以为我的面前,我看到他的答案+雷似乎更简单因为我已经在JavaScript内部做了很多客户端的东西),我环顾四周,看看我已经得到了什么,并且意识到var rcbID = sender.get_id();已经使我获得了与我已经在寻找的非常相似的值(只是改为它说SunLocale,它说SunActivity)。

所以我想嘿,我可以substring()出rcbID中的所有内容,然后追加“Locale”到它,然后运行$ find()命令以获得适当的RadComboBox。事实证明,它的工作原理。无论如何,尽管我非常感谢你们考虑我的问题,即使我最终找到了自己的解决方案。:-)

0
  • 建立某种形式在服务器端的列表来跟踪的控件ID的
  • 渲染时无论出于何种原因的页面,写那些ID的出一个脚本块(把它们放在一个数组或任何
  • 当您需要提交您的值时,您可以使用javascript数组内容来引用控件。

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

+0

项目符号1和2不会工作,因为RadComboBoxes的控件ID不是在运行时生成的 - 它们是在我的RadGrid进入编辑模式后从一些GridDropDownListColumnEditor对象生成的。但是即使在使用FireBug之后,Bullet 3也可以工作,但我不清楚三个标记中哪一个正在存储我需要的值(在我的情况下,RadComoBox似乎生成三个HTML标记,但是当我尝试返回时,它们都没有显示存储值它与jQuery)。 – KSwift87 2010-07-22 19:56:14

+0

我非常感谢你的回应,但我想我在再次查看所有JavaScript(不是真正的雄辩,但可靠)后,想出了一个答案。我将在测试完成后发布它。 – KSwift87 2010-07-22 19:57:03

+0

原来我的答案并不像我希望的那样工作......寻找答案仍在继续(明天)! – KSwift87 2010-07-22 20:05:30