Событие OnClick таблицы строк распространяется на все содержащиеся элементы? - PullRequest
1 голос
/ 10 марта 2011

Я столкнулся с некоторым интересным кодом в нашем устаревшем приложении, работающем под Internet Explorer. Учтите следующее:

<script type="text/javascript">
  function selectRow()
  {
    var src = window.event.srcElement; // Array of OPTION?!
    var rowIndex = src.rowIndex; // Undefined for an OPTION element
    highlightRow(rowIndex);
  }
</script>
<table>
  <tr onclick="selectRow();">
    <td>
      <select id="foo">
        <option value="baz">baz</option>
      </select>
    </td>
  </tr>
</table>

Итак, вот где я в тупике. Когда пользователь выбирает элемент из элемента SELECT, происходит событие ONCLICK, и выполняются следующие условия:

  • 'this' соответствует 'Window'
  • 'Window.event.srcElement' оценивается как массив элементов 'OPTION'
  • Кажется, нет способа добраться до родительского элемента опций из обработчика событий.

Мне нужно иметь возможность получить индекс строки таблицы, по которой щелкнули. (Как видно из приведенного выше примера, устаревший код неверно предполагает, что this.rowIndex соответствует текущему индексу строки таблицы.)

Я предполагаю, что виновником здесь является событие, всплывающее .

Я открыт для предложений по исправлению этой проблемы самым правильным образом. Мне приходит в голову, что это может быть способ привязать событие к строке, но я в этом немного сомневаюсь (поскольку событие все равно будет пузыриться).

(FWIW, я не пробовал это ни под каким другим браузером, поскольку наша компания поддерживает только IE. Пожалуйста, не стреляйте в мессенджер.)

1 Ответ

0 голосов
/ 20 мая 2011

Вам не хватает дополнительной сложности в вашем образце? Потому что почему бы просто:

<tr onclick="highlightRow(this.rowIndex);">

если это действительно все, что вам нужно с этим сделать.

...