Rahul Chowdhury
Rahul Chowdhury

Reputation: 1158

document.getElementsByName not working in IE11 but working good in IE8?

In IE11 document.getElementsByName is not working as expected.

var colRadioButtonSelected = document.getElementsByName("radioButtonSelected_" + containerCurrencyCode);

var colLabelNetDollarsDue = document.getElementsByName("labelNetDollarsDue_" + containerCurrencyCode);

var colLabelUSDAmount = document.getElementsByName("labelUSDAmount_" + containerCurrencyCode); 
            for(var x=0; x < colRadioButtonSelected.length; x++)
            {      
                colRadioButtonSelected[x].disabled = readOnly ? "disabled" : ""; 
                var textNetDollarsDue = colLabelNetDollarsDue[x].innerText;

Have debugged the code and seen document.getElementsByName section is returning different type of value in IE versions.

enter image description here

Have tried a Wrapper like below but didn't worked for me . Any Help?

function getElementsByNameWrapper(name) {
  a = new Array();

  for (var i = 0; i < document.getElementsByName(name).length; ++i) {
    a.push(document.getElementsByName(name)[i]);
  }

  return a;
}

Have changed to

var textNetDollarsDue = colLabelNetDollarsDue[x].textContent ||
    colLabelNetDollarsDue[x].innerText;

Error looks like

enter image description here

HTML markup is something like below ..

<asp:Repeater ID="ReportRepeater" runat="server" OnItemDataBound="ReportRepeater_ItemDataBound">
                                            <ItemTemplate>
                                                <tr class="<%# OddEven("odd", "even") %>">
                                                    <td align="center"><input type="radio" id="radioButtonSelected_<%# ((ReportEntity)Container.DataItem).BaseCurrency %>" name="radioButtonSelected_<%# ((ReportEntity)Container.DataItem).BaseCurrency %>" disabled="disabled" style="visibility: <%# (string.IsNullOrEmpty(((ReportEntity)Container.DataItem).SecurityNumber) || string.IsNullOrEmpty(((ReportEntity)Container.DataItem).CusipNumber)) ? "hidden" : "" %>;" value="<%# ((ReportEntity)Container.DataItem).IncomeReportId %>" /></td>
                                                    <td align="center"><%# ((ReportEntity)Container.DataItem).IncomeStatus %></td>
                                                    <td align="left"><%# String.Format("{0:d}", ((ReportEntity)Container.DataItem).AllocationDate) %></td>
                                                    <td align="center"><%# ((ReportEntity)Container.DataItem).SedolNumber %></td>
                                                    <td align="center"><%# ((ReportEntity)Container.DataItem).IsinNumber %></td>
                                                    <td align="center"><%# ((ReportEntity)Container.DataItem).ReportEvent %></td>
                                                    <td align="center"><%# ((ReportEntity)Container.DataItem).ReferenceNumber %></td>
                                                    <td align="left"><%# String.Format("{0:d}", ((ReportEntity)Container.DataItem).RecDate) %></td>
                                                    <td align="left"><label id="labelPayDate_<%# ((ReportEntity)Container.DataItem).BaseCurrency %>"><%# String.Format("{0:d}", ((ReportEntity)Container.DataItem).PayDate) %></label></td>
                                                    <td align="right"><%# String.Format("{0:#,##}",((ReportEntity)Container.DataItem).Quantity) %></td>
                                                    <td align="right"><%#  ((ReportEntity)Container.DataItem).BaseRate %></td>
                                                    <td align="right"><label id="labelNetDollarsDue_<%# ((ReportEntity)Container.DataItem).BaseCurrency %>"><%# Formatting.FormatCurrency(((ReportEntity)Container.DataItem).NetDollarsDue).Replace("$","")%></label></td>
                                                    <td align="center"><label id="labelUSDAmount_<%# ((ReportEntity)Container.DataItem).BaseCurrency %>"></label></td>
                                                    <td align="center">&nbsp;</td>
                                                    <td style="width:120px" align="center"><a id="Details" runat="server" >Show Details</a></td>                                    
                                                </tr>  

Upvotes: 1

Views: 3636

Answers (1)

Pointy
Pointy

Reputation: 413709

Your problem has nothing to do with .getElementsByName(). The issue is that IE11 supports the standard .textContent instead of the old (non-standard) .innerText.

You can account for either version like this:

 var textNetDollarsDue = colLabelNetDollarsDue[x].textContent ||
    colLabelNetDollarsDue[x].innerText;

edit — the above is sort-of true (though IE11 may still understand .innerText) but with your markup posted it's now clear that the problem is that you're using the ByName() API but you're really interested in "id" values. You can use a class name instead of an "id" for those labels; the markup is invalid with all those duplicated "id" values anyway.

Upvotes: 1

Related Questions