I have some images with class name ".mute_btn" and when i click on them, my images source is changing :
$('.mute_btn').toggle(function () {
var clicked = false;
var src = $(this).attr("src");
src = src.replace(/(.*)\.(png|gif|jpg|jpeg)$/, "$1-over.$2");
$(this).attr("src", src);
}, function () {
var src = $(this).attr("src");
src = src.replace(/(.*)-over\.(png|gif|jpg|jpeg)$/, "$1.$2");
$(this).attr("src", src);
});
But i've seen that toggle() is deprecated in jQuery 1.8
So i'm trying to do it like this :
var clicked = false;
$('.mute_btn').click(function() {
if (clicked) {
var src = $(this).attr("src");
src = src.replace(/(.*)-over\.(png|gif|jpg|jpeg)$/, "$1.$2");
$(this).attr("src", src);
clicked = false;
}
else {
var src = $(this).attr("src");
src = src.replace(/(.*)\.(png|gif|jpg|jpeg)$/, "$1-over.$2");
$(this).attr("src", src);
clicked = true;
}});
But the result is not perfect. Sometime, the images do not change state.
Do you know what's wrong ?
I suspect the problem is that you have multiple images, but you're trying to manage their clicked status with a single variable. Try storing the clicked status against the individual elements as follows:
$('.mute_btn').click(function() {
if ($(this).data("clicked")) {
var src = $(this).attr("src");
src = src.replace(/(.*)-over\.(png|gif|jpg|jpeg)$/, "$1.$2");
$(this).attr("src", src);
$(this).data("clicked",false);
}
else {
var src = $(this).attr("src");
src = src.replace(/(.*)\.(png|gif|jpg|jpeg)$/, "$1-over.$2");
$(this).attr("src", src);
$(this).data("clicked",true);
}
});
Note that you could cache your $(this)
object instead of making a new one each time, but I've not done so so that the change needed to solve your problem is more obvious.
LIVE DEMO
$('.mute_btn').click(function () {
var src = this.src;
var isClicked = src.indexOf('-over') > -1 ; // true if '-over' is found
if( isClicked ){
this.src = src.replace(/(.*)-over\.(png|gif|jpg|jpeg)$/, "$1.$2");
}else{
this.src = src.replace(/(.*)\.(png|gif|jpg|jpeg)$/, "$1-over.$2");
}
});
LIVE DEMO using ternary operator
$('.mute_btn').click(function () {
var src = this.src;
var isClicked = src.indexOf('-over') > -1 ;
this.src = isClicked ?
src.replace(/(.*)-over\.(png|gif|jpg|jpeg)$/, "$1.$2") :
src.replace(/(.*)\.(png|gif|jpg|jpeg)$/, "$1-over.$2") ;
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With