2013-05-01 5 views
0

У меня есть таблица в jsp, которая динамически заполняется. Я использовал тот же идентификатор для всех строк таблицы.IE10: getElementsByName() не возвращает элементы с одинаковым идентификатором в IE10

В javascript я хочу вернуть все элементы строки таблицы, чей идентификатор «resultRow». и getElementsByName («resultRow») в JS дает пустой HTMLCollection в IE10

Есть ли другой способ, чтобы получить tablerows совпавших ид

Любая помощь очень ценится

`вот мой фрагмент кода

In JSP: 
<table id="subSecondTable" cellpadding="0" cellspacing="0"> 
    <c:set var="loopCount" value="0" /> 
    <c:forEach var="vinList" items="${requestScope.vehicleDetailsPO}"> 
    <tr id="resultRow" height="10" class="handCursor" 
     onclick="rowColorChange('<c:out value="${loopCount}"/>','<c:out value="${vinList.vin}"/>');"> 

In js: 
function rowColorChange(rowNumber,vin){ 
    var rows=document.getElementsByName("resultRow"); 
    var columns; 
    rowHighlighted=rowNumber;  
    for(i=0;i<rows.length;i++){ 
     if (i==rowNumber){  
      rows[rowNumber].style.backgroundColor="blue"; 
      //change the text color for the highlighted row 
      columns = rows[rowNumber].cells 
      for(j=0;j<columns.length;j++){ 
       columns[j].style.color = "white"; 
      } 
      //change the text color for the highlighted row 
      var previousRowint = parseInt(previousRow);     
      if (previousRow != rowNumber) 
      {    
       columns = rows[previousRowint].cells 
       for(j=0;j<columns.length;j++){ 
        columns[j].style.color = "black"; 
       } 
      }    
      previousRow=rowNumber; 
      if(vin==''){    
       vin = rows[parseInt(rowHighlighted)].cells[3].innerText; 
      } 
      document.getElementById("txtCopyVin").value=vin; 
      document.getElementById("txtCopyVin").select(); 
     }else{  
      rows[i].style.backgroundColor="white";      
     } 
    } 
    if(window.event!=null){ 
     rows[rowNumber].cells(window.event.srcElement.cellIndex).focus(); 
    } 
}`  
+0

вы проверили, что полученный HTML в IE10? – Satya

+0

переменные строки - пустая коллекция в IE10 resultant Html такой же, как в Ie9 – Harish

ответ

1

Такое поведение является конструктивным.
name и id - это две разные вещи.

Кроме того, id s должен быть уникальным; ваш HTML недопустим.

Вместо этого вы должны использовать class и позвонить по телефону getElementsByClassName().

+0

Спасибо getElementsByClassName()! – Harish

0

С каких пор были name и id? Например, сколько людей называют Джоном Смитом (кроме доктора)? Несмотря на это, у всех их есть уникальные идентификаторы. То же самое относится к вашему HTML.

Используйте <tr name="resultRow"...>, то вы можете получить доступ к getElementsByName('resultRow')

+0

имя не является допустимым атрибутом для элемента tablerow. Я использовал его, это не сработало – Harish

+0

У меня создалось впечатление, что 'name' является стандартным атрибутом, который может применяться ко всем элементам. Можете ли вы продемонстрировать, что он не работает? –

+0

Извините, это была моя ошибка, это сработало. – Harish

1

Я только что подтвердил с моим собственным тестирования, что это изменение, Microsoft, кажется, сделал в IE10, чтобы сделать его совместимым с любым другим браузером на рынке. В каждом другом браузере идентификатор и имя - это разные вещи. Но до IE 10 Microsoft решила сделать что-то по-другому, что вызвало много несовместимостей, как описано here. Это изменение зафиксировало мой код, написанный для хром, но, похоже, сломал код, написанный для IE.

Если вы поручите своим пользователям включить «режим совместимости», он должен работать по-прежнему, но это, вероятно, не очень хорошее долгосрочное решение.

Хорошая новость заключается в том, если вы пройдете и исправите эту проблему в своем коде, указав, что идентификаторы id и имена ссылаются на имена, ваш сайт будет совместим с другими браузерами, кроме IE.

Глядя на ваш код, кажется, что вы хотите заменить ID = «resultRow» с именем = «resultRow»

Смежные вопросы