I have multiple images on the page. Every image has option "add to favorites". Everything work just fine except the message that is showing above image if image is added or not to favorites.
Success/Fail message is showing on top above first image only. I know that I must use unique id for each image but I can't understand how exactly.
Here is the HTML part where I show the images.
echo '
<article class="main-post" id="'.$row['image_id'].'" >
<div class="article-top">
<hr />
<h1><a href="imagePreview.php?image_id='.$row['image_id'].'">'.$row['image_caption'].'</a></h1>
<div class="counters-line">
<div class="pull-left">
<span id="message_favorites"></span>
</div>
<div id="'.$row['image_id'].'" class="pull-right">
<div class="buttons-bar">
<div class="buttons">
<a href="javascript:;" class="bookmarked has-tooltip" data-title="Add to Favorites" id="'.$row['image_id'].'"></a>
</div>
</div>
</div>
</div>
<div class="article-content">
<figure>
<a href="imagePreview.php?id='.$row['image_id'].'"><img class="lazy" data-original="upload/'.$row['image_name'].'" alt="'.$row['image_name'].'"/></a>
</figure>
</div>
</div>
</article>';
This snippet is in loop and show images from DB. I have added id="$row['image_id']" to the
` so this way each article has now unique ID.
The success message is showing here
<div class="pull-left">
<span id="message_favorites"></span>
</div>
And this is the ajax function
$(document).ready(function(){
$('.bookmarked', $('.buttons')).click(function(){
$.post('misc/add_favorites.php',
{
"image_id": $(this).attr('id'),
},
function(data){
if(data == 0){
$('#message_favorites').html('<div id="alertFadeOut" style="color: green">Added to favorites!</div>');
$('#alertFadeOut').fadeOut(3000, function () {
$('#alertFadeOut').text('');
});
}
else {
$('#message_favorites').html('<div id="alertFadeOut" style="color: green">It's already in favorites!</div>');
$('#alertFadeOut').fadeOut(3000, function () {
$('#alertFadeOut').text('');
});
}
});
});
});
ajax part send data to add_favorites.php
which save image id and user id into DB.
So how exactly I can show this message on the image which is clicked?
UPDATE Ajax
$(document).ready(function(){
$('.bookmarked', $('.buttons')).click(function(){
$.post('misc/add_favorites.php',
{
"image_id": $(this).attr('id'),
},
var classes = $(this).attr('class'); //fetch all classes of the clicked item (this is a string)
//alert('The classes: '+classes);
var classarray = classes.split(' '); //split the string into it parts seperated by "blank"
$.each(classarray, function(index, item){ // execute this for every subpart
//alert(index+' '+item);
if(index==2) // since the third (better: use regexp) subpart stores the id-information...
{
//alert(item);
$('#message_favorites').html('<div id="alertFadeOut" style="color: green">Added to favorites!</div>');
$('#alertFadeOut').fadeOut(3000, function () {
$('#alertFadeOut').text('');
});
}
else {
$('#message_favorites').html('<div id="alertFadeOut" style="color: green">It's already in favorites!</div>');
$('#alertFadeOut').fadeOut(3000, function () {
$('#alertFadeOut').text('');
});
}
});
});
});
HTML
echo '
<article class="main-post" id="'.$row['image_id'].'" >
<div class="article-top">
<hr />
<h1><a href="imagePreview.php?image_id='.$row['image_id'].'">'.$row['image_caption'].'</a></h1>
<div class="counters-line">
<div class="pull-left">
<div id="'.$row['image_id'].'"><span id="message_favorites"></span></div>
</div>
<div id="'.$row['image_id'].'" class="pull-right">
<div class="buttons-bar">
<div class="buttons">
<a href="javascript:;" class="bookmarked has-tooltip '.$row['image_id'].'" data-title="Add to Favorites" id="'.$row['image_id'].'"></a>
</div>
</div>
</div>
</div>
<div class="article-content">
<figure>
<a href="imagePreview.php?id='.$row['image_id'].'"><img class="lazy" data-original="upload/'.$row['image_name'].'" alt="'.$row['image_name'].'"/></a>
</figure>
</div>
</div>
</article>';