Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jquery select clicked element within a set of elements with the same classname

Maybe you guys can help me out with this, I've been struggling with it for the past 30 minutes.

Let's say I have four elements with the same class.

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

How can I select the one that was clicked on?

I was able to get it work like this:

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

However, I need it to fire without being clicked on success after an ajax call, so I need to be able to do something like this (failed attempts):

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

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

Any suggestions? Thanks so much!!

like image 701
user2278120 Avatar asked Jun 22 '13 18:06

user2278120


2 Answers

It sounds like the ajax call is made when one of the elements is clicked, but you need to pass different values in the ajax call depending on which element is clicked. Rather than use an "onclick" attribute, you could do the following:

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

Of course, you would set the values of the data- attributes using PHP variables.

like image 143
John S Avatar answered Sep 23 '22 07:09

John S


Use the trigger function....

So attach the click handler...

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

Then in your ajax success function....trigger that click...

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

But determining which one to trigger will be the trick.

How do you know which one to click, based on the ajax????

If you're just doing an ajax call, based on which link you cick then the solution is much simpler.......cuz you already know which link was clicked

$('.test').click(function() {
var link = $(this);
$.ajax(url, {
    success: function() {
        link.toggleClass("btn-danger btn-success");
     }
   });
});
like image 25
Kylie Avatar answered Sep 20 '22 07:09

Kylie