2013-06-22 8 views
8

Forse voi ragazzi potete aiutarmi con questo, ho lottato con esso per gli ultimi 30 minuti.Jquery seleziona l'elemento selezionato all'interno di un insieme di elementi con lo stesso nome di classe

Diciamo che ho quattro elementi con la stessa classe.

<div class="test">hi</div> 
<div class="test">hey</div> 
<div class="test">yo</div> 
<div class="test">What's up</div> 

Come selezionare quello su cui è stato fatto clic?

sono stato in grado di farlo funzionare in questo modo:

$('.test').click(function() { 
    $(this).toggleClass("btn-danger btn-success"); 
}); 

Tuttavia, ho bisogno di sparare senza essere cliccato in caso di successo, dopo una chiamata AJAX, quindi ho bisogno di essere in grado di fare qualcosa del genere (tentativi falliti):

$('.test', this).toggleClass("btn-danger btn-success"); // This did not work 

$(this).find('.test').toggleClass("btn-danger btn-success"); // Also did not work 

Qualche suggerimento? Grazie mille!!

+0

Come si determina a quale collegamento deve essere attivato l'evento? – lonesomeday

+0

Ho avuto un problema simile in precedenza che ho risolto con 'var self = this'. Forse potrebbe aiutarti. – sonoftunk

+0

Come fai a sapere quale elemento devi cliccare dopo ajax ?? O è la chiamata Ajax legata all'evento click, che, se così fosse, lo rende molto più semplice – KyleK

risposta

2

Suona come la chiamata AJAX è fatta quando uno degli elementi viene cliccato, ma è necessario passare valori diversi nel chiamata ajax a seconda dell'elemento su cui si fa clic. Invece di utilizzare un attributo "onclick", si potrebbe procedere come segue:

HTML:

<div class="test" data-param1="value1a" data-param2="value2a">hi</div> 
<div class="test" data-param1="value1b" data-param2="value2b">hey</div> 
<div class="test" data-param1="value1c" data-param2="value2c">yo</div> 
<div class="test" data-param1="value1d" data-param2="value2d">What's up</div> 

JavaScript:

$('.test').click(function() { 
    var $div = $(this); 
    $.ajax(url, { 
     data: { 
      param1: $div.attr('data-param1'), 
      param2: $div.attr('data-param2') 
     }, 
     success: function() { 
      $div.toggleClass("btn-danger btn-success"); 
     } 
    }); 
}); 

Naturalmente, è necessario impostare i valori dei data- attributi utilizzando Variabili PHP

+0

Questo ha funzionato per me. L'unica ragione per cui non ho potuto usare questo il metodo prima è che non sapevo di passare le variabili alla mia funzione ajax come descritto qui. :) Molto grazie ho risolto il mio codice! – user2278120

1

Utilizzare la funzione trigger ....

Quindi fissare il gestore di clic ...

$('.test').on('click', function() { 
    $(this).toggleClass("btn-danger btn-success"); 
}); 

Poi nella funzione successo ajax .... trigger che cliccare ...

$('.test').trigger('click'); 

Ma determinare quale triggerare sarà il trucco.

Come fai a sapere quale fare clic in base all'ajax ????

Se stai solo facendo una chiamata AJAX, in base al quale collegare si CICK allora la soluzione è molto più semplice ....... perchè si sa già che è stato fatto clic collegamento

$('.test').click(function() { 
var link = $(this); 
$.ajax(url, { 
    success: function() { 
     link.toggleClass("btn-danger btn-success"); 
    } 
    }); 
}); 
+0

Questo sembra promettente, ho intenzione di giocare con questo, grazie! – user2278120

+0

Sfortunatamente, questa soluzione non funzionerà per me perché non posso attivare la chiamata ajax con $ ('. Test'). Click (function() {Devo chiamarlo con il metodo onclick perché sto passando in dinamico variabili php come parametri per la funzione Ajax – user2278120

+0

Puoi pubblicare un esempio di cosa intendi ??? – KyleK

0

E ' non è possibile dare a ciascuno di questi un ID così puoi accedervi direttamente?

Se si stanno attivando su una funzione di richiamata è possibile creare un riferimento al div cliccato in una variabile?

cioè

var clicked; 

$('.test').click(function(){ 
    clicked = $(this); 
}); 

poi nella vostra risposta Ajax:

clicked.toggleClass("btn-danger btn-success"); 
+0

Questo non funzionerà per me, perché la chiamata ajax è attivata sul onclick del div. Devo usare onclick perché passa gli array php che sono in loop. – user2278120