2009-10-25 23 views
6

Mi chiedevo quale dei due metodi sia preferibile o è la linea guida generale che usi $ (elem) .click() per cose semplici e < a onclick = "func (1, 2, 3, 4);" > quando è necessario passare parametri allo script quando si fa clic sull'elemento? Ho cercato di usare solo $ (elem) .click() per mantenere il codice pulito e semplice, ma quando devi passare più di un parametro diventa complicato e la chiamata di funzione su onclick = "" sembra una soluzione migliore .onclick = "func()" o .click()?

risposta

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

Sembra che quello che vuoi, no?

+0

Ma se i parametri passati alla funzione sono unici per ogni elemento e si può avere centinaia di questi elementi, diventa più difficile da fare in questo modo, ecco perché ho Stavo chiedendo se in quei casi dovresti noi e il metodo onclick = "func (1, 2, 3, 4)" o dovresti rimanere con $ (elem) .click(). Ovviamente potresti inserire tutti quei parametri nella stringa di query url come foo = 1 & bar = 2 e metterlo in href = "" e in $ (elem) .click() usare $ (this) .href() per ottenere i valori , ma è più efficiente semplicemente fare onclick = "func()"? – TheMagician

+1

bene allora dovresti usare gli attributi dei dati html5 per impostare valori univoci associati a ciascun elemento rilevante: 'link' – geowa4

+2

Se hai centinaia di questi elementi il ​​modo più efficiente è usare [la delega degli eventi] [http: //www.danwebb. net/2008/2/8/event-delegation-made-easy-in-jquery] al posto dei singoli gestori onclick per ogni elemento. Per mantenere il JS meno mescolato con il tuo HTML, puoi memorizzare i parametri necessari in una struttura di dati Javascript, con le chiavi per ciascun oggetto che è l'ID dell'elemento o simile. –

3

Preferisco usare $ (elem) .click() per mantenere il mio codice HTML privo di javascript, lo considero più pulito.

7

Una delle idee principali di jQuery è javascript non invadente (ad esempio HTML e JavaScript sono due grandi gusti che non hanno un buon sapore insieme). L'uso dell'oggetto jQuery e dei selettori per collegare le funzioni è ciò che preferirebbe fare.

4

Se i parametri potrebbero essere determinati al momento del clic, vorrei suggerire il metodo di rilegatura:

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

Un caso ho potuto pensare di farlo in linea, è che se si sta costruendo multipla collegamenti in un ciclo in cui params 1, 2, 3 o 4 sono diverse in base a una variabile di back-end o qualcosa:

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

Personalmente, cerco sempre di legarsi alla manifestazione in un $ (document) .ready() richiama.

Spero che questo aiuti

0

È possibile passare parametri a una funzione quando si utilizza jQuery:

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

preferisco usare sempre jQuery per la gestione mio evento. Non mi piace mettere alcun comportamento nel mio codice HTML, anche con onclick e eventi correlati.

Inoltre, se si fa clic programmaticamente su qualcosa utilizzando $(".selector").click() e si dispone di un gestore collegato utilizzando sia onclick e jQuery, chiamerà prima il gestore jQuery, quindi il gestore impostato utilizzando l'attributo. Ma se fai clic con il mouse, è il contrario. Potrebbe essere inaspettato e finire per dare grattacapi in fondo alla strada.

2

mi piacerebbe andare con il click() pure, se si dispone di ulteriori parametri che si desidera passare alla funzione, aggiungerli a qualsiasi degli attributi dell'oggetto, io di solito uso rel come questo:

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

nello script si può fare questo:

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