2013-06-22 15 views
8

Może możecie mi w tym pomóc, zmagałem się z tym przez ostatnie 30 minut.Jquery wybierz kliknięty element w zestawie elementów o tej samej nazwie klasy.

Załóżmy, że mam cztery elementy z tą samą klasą.

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

Jak mogę wybrać ten, który został kliknięty?

udało mi się dostać to działa tak:

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

Jednak muszę go zwolnić bez kliknięciu na sukces po wywołania AJAX, więc muszę być w stanie zrobić coś takiego (nieudane próby):

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

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

Jakieś sugestie? Dzięki wielkie!!

+0

Jak określić, które łącze powinno wywoływać zdarzenie? – lonesomeday

+0

Miałem podobny problem wcześniej, że rozwiązany przez 'var self = this'. Być może to może ci pomóc. – sonoftunk

+0

Skąd wiadomo, który element należy kliknąć po ajax? A może wywołanie ajax jest powiązane ze zdarzeniem kliknięcia, a jeśli tak, to jest o wiele łatwiejsze – KyleK

Odpowiedz

2

Brzmi jak wywołania AJAX jest wykonana, gdy jeden z elementów zostanie kliknięty, ale trzeba przejść różne wartości w wywołanie ajax w zależności od tego, który element jest kliknięty. Zamiast używać atrybutu "onclick", można wykonać następujące czynności:

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"); 
     } 
    }); 
}); 

Oczywiście, należy ustawić wartości atrybutów data- korzystania Zmienne PHP.

+0

To działało dla mnie. Jedyny powód, dla którego nie mogłem tego użyć poprzednia metoda polega na tym, że nie wiedziałem o przekazywaniu zmiennych do mojej funkcji ajaxowej, jak to opisano tutaj. :) Wiele dzięki, naprawiłem swój kod! – user2278120

1

Użyj funkcji wyzwalania ....

Więc dołączyć obsługi click ...

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

Następnie w funkcji ajax sukcesu .... wyzwalać że kliknij ...

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

Ale ustalenie, który z nich zostanie uruchomiony, będzie podstępem.

Skąd wiesz, który z nich kliknąć, na podstawie ajax ????

Jeśli jesteś po prostu robi wywołanie ajax, na podstawie którego odwołuje się pan cick to rozwiązanie jest znacznie prostsze ....... bo już wiesz, który Link został kliknięty

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

To wydaje się obiecujące, zamierzam się z tym bawić, dzięki! – user2278120

+0

Niestety, to rozwiązanie nie będzie działać, ponieważ nie mogę wywołać wywołania ajax z $ (".test"). Click (function() {Muszę nazwać to za pomocą metody onclick, ponieważ przechodzę w dynamiczny zmienne php jako parametry funkcji ajax – user2278120

+0

Czy możesz podać przykład tego, co masz na myśli? – KyleK

0

Czy nie można podać każdego z tych identyfikatorów, aby uzyskać do nich bezpośredni dostęp?

Jeśli uruchamiasz je za pomocą funkcji zwrotnej, czy możesz utworzyć odwołanie do klikniętego elementu div w zmiennej?

tj

var clicked; 

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

następnie w odpowiedzi ajax:

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

To nie zadziała dla mnie, ponieważ wywołanie ajax jest wyzwalane na onclick div. Muszę użyć onclick, ponieważ przekazuje on tablice php, które są zapętlone. – user2278120