2009-10-08 8 views
10

Derzeit bin ich mit so etwas wie:Wie mehrere Argumente an jQuery Click-Funktion senden?

$('.myclass').click(function(){ 
    var msg = $(this).attr('id'); 
    alert(msg) 
}); 

Und HTML:

< a href="#" class="myclass" id="101">Link</a> 

Wenn ich zusätzliche Parameter benötigen, wie würde ich sie lesen? Auch ist der aktuelle Weg, den ich richtig benutze? Ursprünglich benutzte ich versteckte Eingabefelder, also war es schon ein Schritt nach oben. : P

+0

Es wird als schlechte Konvention angesehen, eine ID mit einer Nummer zu beginnen, aber wenn Sie sie nicht als ID verwenden, ist es wahrscheinlich in Ordnung - beim letzten Mal erkennt Firefox keine ID, die mit einer Zahl beginnt. – Mottie

+0

ja, das ist richtig fudgey ... starte deine IDs nicht mit einer Nummer, aber die Idee in meiner Antwort ist immer noch die gleiche. – Jason

Antwort

1

können Sie bind() verwenden und zusätzliche Daten an den Ereignishandler als event.data

18

jQuery Events

jQuery .click()

$('.myclass').bind("click", { Param1: "", Param2: 2 }, function(event){ 
    alert(event.data.Param2); 
}); 
+3

Würde das bedeuten, dass ich diese Funktion auf der gleichen Seite hinzufügen müsste? Derzeit sind alle meine js-Sachen in einer separaten Datei. – Roger

+0

Also, ich in den Ereignisdaten ist es möglich, ein ganzes Json-Objekt zu übergeben, nicht wahr? Nette Eigenschaft. –

+0

@Roger Sie können die Funktion auch außerhalb haben, stellen Sie einfach sicher, die Argumente in Ihrer externen Funktion mit der Methode event.data.ParamX analysieren, wie die Antwort zeigt. Es funktioniert perfekt. – andreszs

1

dies die beste Methode sein kann, nicht senden, sondern etwas, was ich getan habe ist, Bindestrich abzugrenzen das ID-Attribut mit anderen Parametern, wie id="101-red-420582", die alle drei verschiedene Dinge bedeuten und kann leicht unter Verwendung der split() zerlegt werden Funktion. nicht die beste, per se, aber ich habe es getan und es funktioniert.

+2

Zufälligerweise kam ich genau auf diese Idee und es funktionierte gut, aber wie du gesagt hast nicht sicher, ob es der richtige Weg ist und manchmal die Zeichenfolge kann ziemlich groß (nicht sicher, ob es eine Grenze der ID ist). – Roger

+0

Ich benutze eine ähnliche Methode die ganze Zeit, aber anstelle der 'ID' verwende ich das Attribut 'rel'. Ich glaube, dass entweder so viele Informationen enthalten sind, wie Sie benötigen, einschließlich HTML. – Mottie

0

schnelle Lösung

<p class="msg_head" id="837" rel="a" **till_limit="9"**>Header-1 </p>

und Sie können beziehen

$(this).attr('till_limit'); 

Diese ähnliche Lösung ist wie Ihre eigene ID definieren und das Element als pro Ihre Anforderung beziehen.

+1

Bitte [verwenden Sie keine Signaturen oder Slogans] (http://stackoverflow.com/faq#signatures) in Ihren Posts. – meagar