cell.children.tags('a')[0].click();
Sebastian Becker
- dhtml
Hallo,
ich habe eine Tabelle mit Links, bei der der jeweilige Link auch beim Anklicken der dazugehörigen Zeile (tr) aufgerufen werden soll. Das untenstehende Skript (verkürzt) sollte eigentlich funktionieren, wenn es im "td" aufgerufen wird. Da ich aber drei Spalten (td) pro Zeile (tr) habe, möchte ich den onClick-Aufruf in das "tr" verlegen.
Wie kann ich von dort aus auf das "a"-tag zugreifen? Ich habe leider bei SelfHTML nichts zu diesem Thema gefunden.
Danke für alle Tips,
Grüße,
Sebastian Becker
---------------------------------------------------------------------
function mClick(cell)
{
if (event.srcElement.tagName == 'td') cell.children.tags('a')[0].click();
}
...
<table>
<tr>
<td><img src="img/bullet.gif"></td>
<td><img src="img/blank.gif"></td>
<td onClick="mClick(this);"><a href="page1.htm">Page 1</a></td>
</tr>
</table>
Hallo Sebastian
ich habe eine Tabelle mit Links, bei der der jeweilige Link auch beim Anklicken der dazugehörigen Zeile (tr) aufgerufen werden soll. Das untenstehende Skript (verkürzt) sollte eigentlich funktionieren, wenn es im "td" aufgerufen wird. Da ich aber drei Spalten (td) pro Zeile (tr) habe, möchte ich den onClick-Aufruf in das "tr" verlegen.
hm, ich würde das ganze so lösen (ungetestet):
<tr onClick="self.location.href="page1.htm'">
<td><img src="img/bullet.gif"></td>
<td><img src="img/blank.gif"></td>
<td><a href="page1.htm" onclick="if (document.all || document.getElementById) return false;">Page 1</a></td>
</tr>
IE ab Version 4 und Opera /NN 6 sollten jetzt eigentlich den Event auf das tr ausführen, egal auf welche Zelle geklickt wird. NN4 und jünger verwenden den a-tag.
Dies liegt daran, dass Ereignisse und ein Mausklick ist ein Ereignis weitergericht werden bis jemand darauf reagiert.
Aber es gibt definitiv noch eine elegantere Lösung, nur habe ich keine Lust mehr die zu suchen.
Wie kann ich von dort aus auf das "a"-tag zugreifen? Ich habe leider bei SelfHTML nichts zu diesem Thema gefunden.
Danke für alle Tips,
Grüße,
Sebastian Becker
function mClick(cell)
{
if (event.srcElement.tagName == 'td') cell.children.tags('a')[0].click();
}
...
<table>
<tr>
<td><img src="img/bullet.gif"></td>
<td><img src="img/blank.gif"></td>
<td onClick="mClick(this);"><a href="page1.htm">Page 1</a></td>
</tr>
</table>
Fortsetzung ...
:-) tab enter enter war keine gute idee mit dem IE
Aber es gibt definitiv noch eine elegantere Lösung, nur habe ich keine Lust mehr die zu suchen.
Eventhandler werden normalerweise durchgereicht, bis er was findet das reagiert.
Wie kann ich von dort aus auf das "a"-tag zugreifen? Ich habe leider bei SelfHTML nichts zu diesem Thema gefunden.
der theoretisch schnelle Weg geht über die Kindselemente also
kinder von tr schaue nach was es gibt (ist td)
gibts ein kind schaue nach, gibts ein a (kann viel sein)
gibts ein a schaue nach ist es ein href
verarbeite es
Kritsch wird es, sobald Element verschachteln
Nunja der Rest ist doku lesen und ausprobieren.
Viele Grüße
Antje
Hallo,
Danke für die schnelle Antwort!
Aber es gibt definitiv noch eine elegantere Lösung, nur habe ich keine Lust mehr die zu suchen.
Das glaube ich auch und kann ich verstehen. Ich wollte mir nämlich das doppelte Schreiben des Links ersparen. Außerdem weiß ich nicht, ob der Aufruf eines Links mit self.location.href auch in die Browser-History eingetragen wird.
Wie kann ich von dort aus auf das "a"-tag zugreifen?
der theoretisch schnelle Weg geht über die Kindselemente also
kinder von tr schaue nach was es gibt (ist td)
gibts ein kind schaue nach, gibts ein a (kann viel sein)
gibts ein a schaue nach ist es ein href
verarbeite es
Gerade an der Stelle komme ich nicht weiter. Wie spreche ich das Kindselement von einem Kindselement an? Geht das vielleicht über
cell.children(1).tags('a')[0].click(); ?
--------------^-----------------------
Vielleicht hat ja noch jemand eine Idee?
Also nochmals vielen Dank und eine gute Nacht, Grüße,
Sebastian
Hallo Sebastian,
Das glaube ich auch und kann ich verstehen. Außerdem weiß ich nicht, ob der Aufruf eines Links mit self.location.href auch in die Browser-History eingetragen wird.
doch wird, aber click() kennt nur der IE und Opera
Gerade an der Stelle komme ich nicht weiter. Wie spreche ich das Kindselement von einem Kindselement an? Geht das vielleicht über
cell.children(1).tags('a')[0].click(); ?
--------------^-----------------------
Teste mal das:
<table width="100%" >
<tr onclick="if (document.all) this.cells[2].all.tags('a')[0].click();
else if (document.getElementsByTagName)
if (this.cells) self.location.href=this.cells[2].getElementsByTagName('a')[0].href;
else self.location.href=this.getElementsByTagName('td')[2].getElementsByTagName('a')[0].href">
<td> Testtext</td>
<td>Testtext </td>
<td><a href="javascript:alert(1)">Verweis</a> </td>
<td> Testtext</td>
</tr>
<tr onclick="if (document.all) this.cells[1].all.tags('a')[0].click();
else if (document.getElementsByTagName)
if (this.cells) self.location.href=this.cells[1].getElementsByTagName('a')[0].href;
else self.location.href=this.getElementsByTagName('td')[1].getElementsByTagName('a')[0].href">
<td> Testtext</td>
<td><a href="javascript:alert(2)">Verweis</a> </td>
<td>Testtext </td>
<td>Testtext </td>
</tr>
</table>
Der Aufruf:
if (document.all) this.cells[2].all.tags('a')[0].click(); //IE ab Version 4
else if (document.getElementsByTagName)
if (this.cells) self.location.href=this.cells[2].getElementsByTagName('a')[0].href; //NN 6
else self.location.href=this.getElementsByTagName('td')[2].getElementsByTagName('a')[0].href //Opera ab 5.12
this nimmt bezug auf die Zeile
cells ist das Array der Zellen einer Zeile
mit this.cells[2]. bzw. this.getElementsByTagName('td')[2] greifst du auf die entsprechende Zelle zu und dann weiter auf den Verweis.
Viele Grüße
Antje
Viele Grüße
Eine Ergänzung noch
if (document.getElementsByTagName)
if (this.cells) { self.location.href=this.cells[2].getElementsByTagName('a')[0].href; return false;}//NN 6
Das return false verhindert, dass der NN6 den Event nach unten durchreicht und wie im Beispiel beim Klick auf den Verweis zweimal das alert() ausführt.
Gruß
Antje
Hallo,
danke für den Code
den Aufruf:
onclick="if (document.all) this.cells[2].all.tags('a')[0].click();
else if (document.getElementsByTagName)
if (this.cells) self.location.href=this.cells[2].getElementsByTagName('a')[0].href;
else self.location.href=this.getElementsByTagName('td')[2].getElementsByTagName('a')[0].href"
muß ich erst mal in eine Funktion verpacken - sonst blick' ich nicht mehr durch - und dann muß ich das Ganze mal in Ruhe testen.
Wäre schön, wenn's klappt! :-)
Grüße,
Sebastian