2009-05-04 15 views
1

Ich habe eine Tabelle mit Daten wie folgt aus:jquery, verhindern Onclick = window.location auf Elternelement

<table> 
<tr onclick="window.location='download.php?id=1'"> 
    <td>Program 1<br/>Short Description 1 (<a onclick="$.popup.show('Install Instructions', 'Instructions pulled from DB here')">Instructions</a>)</td> 
    <td>Added by user and date/time here<td> 
    <td>Filesize here<td> 
    <td><a href="edit.php?id=1">Edit</a> - <a href="delete.php?id=1">Delete</a><td> 
</tr> 
(repeat TRs for more programs pulled from DB) 
</table> 

Das Problem, das ich habe, ist, dass, wenn Sie die (Anleitung) Link klicken, es sollte Öffnen Sie ein Fenster mit den Anweisungen. Es tut es, aber es feuert auch den TR onclick. Also bekomme ich das Popup für einen Bruchteil einer Sekunde, dann geht es zu download.php.

Gibt es einen Weg, ich kann verhindern, dass es den TR onclick feuert? Vorzugsweise mit jQuery, aber ich habe auch keine Probleme mit JavaScript.

Antwort

3

Im Grunde müssen Sie propagation of events mit event.cancelBubble (für IE) oder event.stopPropagation() stoppen (für alle anderen). Die solution given from quirksmode (die ich vorher benutzt habe) ist so etwas wie dies zu tun:

<script type="text/javascript"> 
var instructions = function(e) { 
    // Get the correct event in a cross-browser manner, then stop bubbling/propagation. 
    if (!e) var e = window.event; 
    e.cancelBubble = true; 
    if (e.stopPropagation) e.stopPropagation(); 

    // Do what you want now 
    $.popup.show('Install Instructions', 'Instructions pulled from DB here'); 
} 
</script> 

Dann wird Ihr Skript würde es nennen:

<td>Program 1<br/>Short Description 1 (<a onclick="instructions(event)">Instructions</a>)</td> 

(Natürlich könnten Sie das alles inline setzen, aber Das ist eine blutige Sauerei.)

Sie können auch finden this question Beleuchtung.

+0

Ich bin überrascht, dass es 16 Minuten dauerte. – cgp

+0

Danke, das funktioniert perfekt. – Samutz

0

Sie können

onclick="false" 

und fügen Ereignisse Ereignismodell Ebene unter Verwendung von 2 (attachEvent in dh oder addEventListener in anderen Browsern) schreiben. Sie können auch jquery binden ('klicken'), wenn Sie jquery verwenden.