2012-03-29 10 views
8

Ich habe ein div wie folgt aus:JQuery: Holen Sie sich das Eltern-Element-ID eines klickten Element

<div id="popupDiv1" class="popupDivClass"> 
    <a id="popupDivClose" class="popupCloseClass">x</a> 
</div> 

Wenn ich auf dem ‚x‘ klicken (Ich möchte eine Jquery Funktion auszuführen disablePopup(id); genannt, wo id das ist id des coresponding popupDiv (ich habe viel popupDiv jeweils mit einem eigenen X-Taste.

zu tun, um so implementiert ich folgenden

$(".popupCloseClass").click(function (event) { 
    var buttonID = $(event.target).attr("id"); 
    var id = $(buttonID).closest("div").attr("id"); 
disablePopup(id); 
}); 

basicaly ich die ID des popupCloseCl erhalten ass geklickt dann bekomme ich die ID des Elternteils (das entsprechende popupDiv) über die am nächsten liegende Methode. dann rufe ich disablePopup auf.

Aber das funktioniert nicht.

Ich habe sogar versucht, die var buttonID = $(buttonID).parent().attr("id"); Methode zu verwenden, aber auch nicht funktioniert.

Ich habe auch versucht var id = this.id;

Jede Hilfe sehr

geschätzt

Dank

+0

'buttonID' wird die Zeichenkette' "popupDivClose" '. Wenn Sie dies an jQuery übergeben, wird nach allen Elementen mit dem ** Tag-Namen ** 'popupDivClose' gesucht. Die ID-Selektoren beginnen mit einem '#'. Aber da 'event.target' (oder auch' this') bereits auf das gewünschte Element zeigt, verwenden Sie einfach '$ (event.target) .closes (...) ...' oder '$ (this) .closest (...) ... '. Ich empfehle, einige weitere jQuery-Tutorials zu lesen ... –

Antwort

13

statt closest verwenden Sie parent wie diese verwenden können ...

var id = $(this).parent().attr("id"); 

Hinweis können Sie das this Schlüsselwort verwenden, das Element zu verweisen, die das Ereignis gestartet. Wie Sie es haben, verwenden Sie den Wert buttonID als Elementselektor, der einen Wert von "popupDivClose" hätte und ohne eine # am Start wird es nicht nach einer ID suchen, sondern ein Tag-Element namens "popupDivClose".

Wenn Sie

buttonID verwenden Sie verwendet haben, könnten diese Codezeile, um es arbeiten ...

var id = $("#" + buttonID).parent().attr("id"); 

Aber ich hätte lieber zu schreiben, die gesamte Veranstaltung wie so ... halten wollte

beachten Sie die Verwendung von event.preventDefault(); Dies wird sicherstellen, dass der Browser die natürliche Aktion für einen Linkklick nicht verarbeiten wird (dhSeitennavigation) - aber in Chrome zumindest, müssen Sie für die Navigation sowieso

Here is a working example

+0

Vielen Dank für die klaren Erklärungen – Youssef

0

Sie

tun sollten
$(".popupCloseClass").click(function (event) { 
    var id = $(this).closest("div").attr("id"); 
}); 

(auch $(this).parent().attr("id"); verwenden könnte), aber am nächsten Verwendung sicherer, falls Sie ändern Ihre HTML-Struktur

+0

Beachten Sie, dass 'parent() 'nur das unmittelbare Elternteil zurückgibt und der Selector-Parameter daher sinnlos ist. Sie können jedoch 'eltern (selector)' 'verwenden, die einen Selektor verwenden und alle Eltern (ganz nach oben) zurückgeben, die mit dem Selektor übereinstimmen. – musefan

+0

@musefan Ja, es ist sinnlos, meiner Erfahrung nach ist es besser, nothing() zu verwenden in der Regel am Ende ändern Sie Ihre HTML-Code und bricht den Code, der parent() verwendet –

+0

Ein guter Punkt zu machen, auf jeden Fall etwas für die Betrachtung. Allerdings muss ich meinen Code auf diese Weise noch nicht kaputt gemacht haben ... dann benutze ich diese Art von Funktionalität sowieso nicht allzu oft – musefan

0

Dies funktioniert a href Wert angeben:

$('a.popupCloseClass').click(function() { 
    var id = $(this).parent().attr('id'); 
});​ 

JSFiddle Demo

Sie Verwenden Sie einfach this anstelle der Art und Weise, wie Sie die ID erhalten und dann versuchen, sie als Selektor zu verwenden (Ihnen fehlte die Bef Erz die ID):

0

Diese Arbeit muss:

$(".popupCloseClass").click(function (event) 
{ 
    var buttonID = $(this).parent().attr('id'); 
    disablePopup(buttonID); 
}); 
Verwandte Themen