jQuery - Stergere stiluri css adaugate anterior
Discutii si intrebari legate de scripturi si functii JavaScript, jQuery si Ajax, cod JavaScript in general.
-
General
- Mesaje: 26
jQuery - Stergere stiluri css adaugate anterior
In codul asta este o problema, cind fac click pe elementul dat $('#products > li > a') se adauga stilurile css de mai sus, dar cind deja fac click pe alt element tot asa $('#products > li > a') stilurile de la elementul curent nu se sterg ci ramin asa si corespunzator daca fac click pe 5 elemente ele toate iau stilurile date, pe cind ar trebuie numai ala pe care fac click. Mai pe scurt trebuie sa fac vreun fel de .remove() ceva inainte de fiecare click dar nu se primeste.
Cod: Selectaţi tot
$('#products > li > a').on('click', function(e) {
var img = $(this).find('img.arrow');
if ($('#products > li > ul').hasClass("active")) {
img.attr("src", img.attr("src").replace("arrow-down.png", "arrow-up.png"));
$(this).css( {
"background-color": "#04BEF2",
"color": "white",
"text-decoration": "initial"
});
} else {
img.attr("src", img.attr("src").replace("arrow-up.png", "arrow-down.png"));
$(this).css("background-color","transparent");
}
});
MarPlo
Mesaje: 4343
Pai da, inainte de a aplica stilurile trebuie un cod ca sa le stearga pe cele adaugate anterior.
Incearca asa, retii intr-o variabila elementul la care se adauga, si inainte de a adauga, anulezi acele stiluri de la obiectul retinut.
Cod: Selectaţi tot
var prev_elm =0;
$('#products > li > a').on('click', function(e){
//removes styles from previous element
if($('#products > li > ul').hasClass("active")){
if(prev_elm !=0) prev_elm.css({ "background-color":'', "color":'', "text-decoration":''});
prev_elm = $(this); //keep current element
var img = $(this).find('img.arrow');
img.attr("src", img.attr("src").replace("arrow-down.png", "arrow-up.png"));
$(this).css({
"background-color": "#04BEF2",
"color": "white",
"text-decoration": "initial"
});
} else {
img.attr("src", img.attr("src").replace("arrow-up.png", "arrow-down.png"));
$(this).css("background-color","transparent");
}
});
General
Mesaje: 26
Da acum css se schimba, dar imaginea nu, pentru ca in cazul daca se facea conditia if se modifica si imaginea, dar acum nu se modifica, principiul e tot ca si la css, cind apas click pe element arata o imagine, iar cind apas click pe alt element imaginea din elementul precedent trebuie sa fie default cum era
MarPlo
Mesaje: 4343
Daca imaginea e in elementul retinut, o gasesti cu find() si aplici inversarea la "src".
Vezi cum e acest cod:
Cod: Selectaţi tot
var prev_elm =0;
$('#products > li > a').on('click', function(e){
//removes styles from previous element and restore img
if($('#products > li > ul').hasClass("active")){
if(prev_elm !=0){
prev_elm.css({ "background-color":'', "color":'', "text-decoration":''});
prev_elm.find('img.arrow').attr("src").replace("arrow-up.png", "arrow-down.png"));
}
prev_elm = $(this); //keep current element
var img = $(this).find('img.arrow');
img.attr("src", img.attr("src").replace("arrow-down.png", "arrow-up.png"));
$(this).css({
"background-color": "#04BEF2",
"color": "white",
"text-decoration": "initial"
});
} else {
img.attr("src", img.attr("src").replace("arrow-up.png", "arrow-down.png"));
$(this).css("background-color","transparent");
}
});
General
Mesaje: 26
straniu, imaginea se modifica cind faci click pe element, dar cind faci click pe alt element dupa precedentul click imaginea ramine tot asa, dar ar trebuie sa se modifice
MarPlo
Mesaje: 4343
Pune codul pe un site precum jsfiddle.net/ (si linkk-ul aici) ca sa se poata vedea si testa direct de cei care vor sa ajute pe acest forum.
General
Mesaje: 26
Nu se primeste sa pun cod-ul pe jsfiddle.net pentru ca e ceva gen template.
Insa rezultat se poate vedea aici:
mattkersley.com/responsive/
introduci adresa URL: visionmagazin.ru si primesti asta:
prntscr.com/991dgc
MarPlo
Mesaje: 4343
Incearca si acest cod, retine si imaginea separat. Daca nu merge, nu stiu care-i problema.
Cod: Selectaţi tot
var prev_elm =0;
var prev_img =0;
$('#products > li > a').on('click', function(e){
if($('#products > li > ul').hasClass("active")){
var img = $(this).find('img.arrow');
//removes styles from previous element and change img back
if(prev_elm !=0) prev_elm.css({ "background-color":'', "color":'', "text-decoration":''});
if(prev_img !=0) prev_img.attr("src").replace("arrow-up.png", "arrow-down.png"));
prev_elm = $(this); //keep current element
prev_img = img; //keep current img
img.attr("src", img.attr("src").replace("arrow-down.png", "arrow-up.png"));
$(this).css({
"background-color": "#04BEF2",
"color": "white",
"text-decoration": "initial"
});
} else {
img.attr("src", img.attr("src").replace("arrow-up.png", "arrow-down.png"));
$(this).css("background-color","transparent");
}
});