2010-07-22 76 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