2009-10-25 8 views
6

Ich habe mich gefragt, welche die oben genannten Methoden bevorzugt oder ist die allgemeine Richtlinie, die Sie $ (Elem) .click() für einfache Dinge verwenden und < ein Onclick = „func (1, 2, 3, 4);“ > Wenn Sie beim Klicken auf das Element Parameter an das Skript übergeben müssen? Ich habe versucht, nur $ (elem) .click() zu verwenden, um den Code sauber und einfach zu halten, aber wenn Sie mehr als einen Parameter übergeben müssen, wird es schwierig und Funktionsaufruf onclick = "" scheint eine bessere Lösung .onclick = "func()" oder .click()?

Antwort

5
$(elem).click(function() { 
    func(1,2,3,4); 
}); 

Das scheint wie, was Sie wollen, nicht?

+0

Aber wenn die übergebenen Parameter an die Funktion auf jedes Element einzigartig sind und Sie Hunderte dieser Elemente haben kann, wird es schwieriger, es so zu tun, damit, warum ich ist Ich habe gefragt, ob Sie in diesen Fällen uns sollten e die onclick = "func (1, 2, 3, 4)" Methode oder sollten Sie mit $ (elem) .click() bleiben. Sie könnten natürlich alle diese Parameter in URL-Abfrage-String wie foo = 1 & bar = 2 und setzen Sie das in href = "" und in der $ (elem) .click() verwenden Sie $ (this) .href(), um die Werte zu erhalten Aber ist es effizienter, einfach onclick = "func()" zu machen? – TheMagician

+1

Nun sollten Sie die html5-Datenattribute verwenden, um eindeutige Werte für jedes relevante Element festzulegen: 'link' – geowa4

+2

Wenn Sie Hunderte dieser Elemente verwenden, verwenden Sie am besten [Ereignisdelegation] [http: //www.danwebb. net/2008/2/8/Event-Delegation-made-easy-in-jquery] anstelle einzelner Onclick-Handler für jedes Element. Um den JS weniger mit Ihrem HTML zu mischen, könnten Sie die benötigten Parameter in einer JavaScript-Datenstruktur speichern, wobei die Schlüssel für jedes Objekt die Element-ID oder ähnliches sind. –

3

Ich ziehe es $ (Elem) .click() verwenden, um meine HTML Javascript-frei zu halten, halte ich es sauberer.

7

Eine der wichtigsten Ideen hinter jQuery ist unaufdringliche Javascript (das heißt HTML und JavaScript sind zwei große Geschmacksrichtungen, die zusammen nicht gut schmecken). Verwenden Sie das jQuery-Objekt und die Selektoren, um die Funktionen anzuhängen, was sie bevorzugen würden.

4

Wenn die Parameter im Moment des Klicks bestimmt werden können, würde ich vorschlagen die Bindungsmethode:

$('a').click(function(){ someFunc(this.val, 2, 3, 4); }) 

Ein Fall ich es inline zu tun denken konnte, ist, wenn Sie bauen mehr Links in einer Schleife, wobei 1 params, 2, 3 oder 4 sind, die je nach einem Backend-Variable oder etwas:

<% for(int i = 0; i < 4; i++) { %> 
    <a onclick="someFunc(1,<%= i %>,3,4"></a> 
<% } %> 

ich persönlich immer versuchen, in einem $ (Dokument) .ready auf das Ereignis zu binden() Rückrufen.

this helps

0

Sie Parameter an eine Funktion übergeben können, wenn Sie jQuery verwenden:

$(".selector").click(function() { func(1,"2", someVar); }); 

Ich habe immer lieber jQuery verwenden für meine Event-Handling. Ich mag es nicht, Verhalten in meinen HTML-Code zu schreiben, auch nicht mit onclick und verwandten Ereignissen.

Wenn Sie programmgesteuert auf etwas unter Verwendung von $(".selector").click() klicken und ein Handler sowohl mit onclick als auch mit jQuery verbunden ist, wird zuerst der jQuery-Handler und dann der Handler mit dem Attribut aufgerufen. Aber wenn Sie mit der Maus klicken, ist es umgekehrt. Das könnte unerwartet sein und dir am Ende Kopfschmerzen bereiten.

2

ich mit dem click() auch gehen würde, wenn Sie zusätzliche Parameter, die Sie an die Funktion übergeben möchten, fügen Sie sie zu einem der Attribute des Objekts, ich rel in der Regel wie folgt verwenden:

<a href="#" class="link" rel="parameter1, parameter2, etc">Link</a> 

im Skript können Sie dies tun:

$('.link').click(function() { 
var parameters = $(this).attr('rel').split(','); 
// Do something 
return false; 
}) 
Verwandte Themen