2009-08-25 2 views
2

Ich habe einen AHAH angeforderten HTML, wie:Wie ein Ereignis an die Gruppe von Verbindungen in binden AHAH angeforderte HTML

<table> 
<tr> 
    <td>...</td> 
    <td><img src="..." onClick="get_next_ahah(sell####)" id="sell####"/></td> 
</tr> 
<tr> 
    <td>...</td> 
    <td><img src="..." onClick="get_next_ahah(sell####)" id="sell####"/></td> 
</tr> 
... and so on 

wo #### - numerische IDs von DB. Wie kann ich die Funktion "get_next_ahah()" auf effiziente Event-geschriebene jQuery-Funktion ersetzen? Und wie kann ich herausfinden, welche ID ich verwende?

+0

Willkommen bei Stack-Überlauf! Es ist wie Experten-Austausch (minus der Sau). – karim79

Antwort

1

Sie können eine ziemlich obskure Form von CSS-Selektor verwenden, um alle Elemente, deren ID enthält den Text „verkaufen“ zu packen und dann verwenden, Ereignisse, um sie zuzuordnen:

$("[id^=sell]") 

Oder, wenn die Elemente alle garantiert werden img s sein, können Sie diese spezifischeren Selektor stattdessen verwenden können:

$("img[id^=sell]") 

Diese Selektoren werden sowohl eine Reihe von Elementen zurück, die in der ID „verkaufen“ haben, die Sie click() anrufen können.

Um die aktuelle ID zu erfahren, können Sie einfach von der ID „verkaufen“ abzustreifen und dann auf Ihre get_next_ahah() Funktion, wie dies passieren, dass:

$("img[id^=sell]").click(function() { 
    get_next_ahah(this.id.replace('sell', ''); 
}); 
+0

@htw - +1, funky Art, es zu tun, aber beachten Sie, dass Attributfilter sloooow sind . – karim79

1

Es wäre einfacher, die Nummer aus der ID zu extrahieren, wenn Sie die Nummer aus dem Präfix-String mit einem Unterstrich oder so getrennt, zB:

<img src="..." id="sell_1234"/> 

Dann würden Sie gerade haben, dies zu tun:

$('table tr td img').click(function() { 
    var num = $(this).attr('id').split('_')[1]; 
    get_next_ahah(num); 
}); 

Wenn Sie nicht die ID ändern, dann nur einen regulären Ausdruck verwenden, anstatt die Nummer aus der Zeichenfolge zu extrahieren, zB:

$('table tr td img').click(function() { 
    var num = $(this).attr('id').match(/\((\d+)\)/)[1]; 
    get_next_ahah(num); 
}); 
+0

"Beachten Sie auch, dass Sie Anker-Tags geschlossen haben, aber keine öffnenden in Ihrem Markup" Entschuldigung, geändert Vielen Dank für Ihre Antwort –