2011-04-20 67 views
1

我有單選按鈕控制,並從我的JavaScript,我想通過javascript getElementsByName()visualforce selectRadio ---如何通過Javascript獲取參考?

獲得無線電輸入數組的第一個警報:alert(radioTitleDisplay);

回報[object HTMLCollection]

然而

第二個警告,不開火。和Firebug報告

radioTitleDisplay.options is null. 

我該如何訪問單選按鈕。我錯過了什麼嗎? (我可以給ID,以從根到孩子的每一個標籤,但我不想這樣做,因爲如果我改變結構,我必須要改變的ID太這是不rubust。)

<apex:form > 
    <apex:selectRadio value="{!titleDisplay}" id="titleDisplayRadio"> 
     <apex:selectOption itemValue="0" itemLabel="one" /> 
     <apex:selectOption itemValue="1" itemLabel="two" /> 
     <apex:selectOption itemValue="2" itemLabel="three" /> 

     <script type="text/javascript"> 

      var radioTitleDisplay = document.getElementsByName('{!$Component.titleDisplayRadio}'); 

      alert(radioTitleDisplay); 
      alert(radioTitleDisplay.options);          
     </script> 
    </apex:selectRadio> 
</apex:form> 

渲染輸入標籤之一是:

<input type="radio" value="2" id="thePage:j_id27:titleDisplayRadio:2" 
name="thePage:j_id27:titleDisplayRadio"> 

回答

1

我的建議,用jQuery。非常有幫助,特別是通過迭代和其他列表進行挖掘。

您在這裏所做的是獲取輸入html對象的列表,該列表沒有選項屬性。 HTML DOM單選按鈕斷開連接,沒有中央對象將其全部保留。

編輯:例如,這代碼會提醒你選擇的單選按鈕:

var myradios = document.getElementsByName('{!$Component.myRadio}'); 
for(i = 0; i < myradios.length; i++) 
    if(myradios[i].checked) { 
     // now we now the selected index 
     alert('Selected value is: ' + myradios[i].value); 
    } 
+0

我同意,但問題是,SF修改元素的ID,這樣就好像被動態和使用$組件的產生方法似乎不適合我如上所述。如果它只是簡單的變量,我可以得到元素的引用。在像上面這樣的數組的情況下,我無法真正知道如何獲取參考。 – 2011-04-21 01:41:26

+0

是的,它確實存在,但反映在$ Component輸出中。你的代碼一切正常,你只需要認識到一組元素不是一個單一的DOM對象,你總是會得到一個集合。您希望在JS中執行的任何操作都必須通過收集元素完成,它是如何運行的,與salesforce無關。 – mmix 2011-04-21 19:29:09

+0

感謝您的洞察力。你能提供示例代碼嗎?我仍然不清楚爲什麼我的方法不起作用。 – 2011-04-22 06:41:17