Je událost OnClick v řádku tabulky rozšířena na všechny obsažené prvky?

V naší starší aplikaci běžící pod Internet Explorerem jsem narazil na zajímavý kód. Zvažte následující:

<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>

Takže, tady jsem zaražený. Když uživatel vybere položku z prvku SELECT, spustí se událost ONCLICK a platí následující:

  • this se vyhodnotí jako Window
  • Window.event.srcElement vyhodnotí se jako pole prvků „OPTION“
  • Zdá se, že neexistuje způsob, jak se dostat k nadřazenému prvku možností z obslužné rutiny události.

Potřebuji být schopen získat index řádku tabulky, na který bylo kliknuto. (Jak můžete vidět z ukázky výše, starší kód nesprávně předpokládá, že this.rowIndex vyhodnotí se podle aktuálního indexu řádku tabulky.)

Předpokládám, že viníkem je zde bublání událostí .

Jsem otevřený návrhům na nápravu tohoto problému tím nejsprávnějším způsobem. Napadá mě, že by to mohlo být tím, jak je událost vázána na řádku, ale trochu o tom pochybuji (protože událost by stále bublala).

(FWIW, v žádném jiném prohlížeči jsem to nezkoušel, protože naše společnost podporuje pouze IE. Prosím, nestřílejte do messengeru.)

Odpověď

Chybí vám ve vašem vzorku nějaká další složitost? Protože proč ne jen:

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

jestli je to opravdu vše, co s tím potřebujete udělat.