» »

jquery dodajanje in odstranjevanje classov

jquery dodajanje in odstranjevanje classov

DrYuri ::

Imam eno zelo čudno težavo. Izdelati hočem neko precej enostavno galerijo s pomočjo jquerya, vendar mi dogaja nekaj čudnega pri odstranjevanju razredov s pomočjo funkcije .removeClass("razred"). Lastnosti, ki so podane v css datoteki se normalno aplicirajo vendar pri kliku na sliko katera naj nebi imela več tega razreda, še vedno zazna kot da je tistega razreda... Kako to izgleda: imam 3 slike, katere imajo vsaka svoj razred(leftPic,centerPic,rightPic). Ko se zgodi klik na levo sliko bi morala leva imeti razred centerPic, srednja in desna pa rightPic. Če gledam v konzoli v chromu se to res zgodi, vendar se mi testni izpis na katero sliko je bil izveden klik ne spremeni:/ Pa tudi ko drugič kliknem na levo sliko se spet kliče click funkcija za razred .leftPic in tako ima leva slika sedaj rightPic in centerPic razred. Any ideas?
<body>
<h2>galerija</h2>

<div id="galerija">
	<img class="leftPic" src="slika.jpg">
	<img class="centerPic" src="slika.jpg">	
	<img class="rightPic" src="slika.jpg">
</div>

</body>

#galerija{
	width:70%;
	height:500px;
	margin-top:200px;
	margin: 0 auto;
}
.centerPic{
	width:450px;
}
img{
	width:350px;
}

$(document).ready(function(){
  //left
  $(".leftPic").click(function(){
	//shift right
	$(".centerPic").addClass("rightPic").removeClass("centerPic");
	$(this).addClass("centerPic").removeClass("leftPic");
	$("h2").text("left pressed");
  });
  //right
  $(".rightPic").click(function(){
	$("h2").text("right pressed");
  });
  //center
  $(".centerPic").click(function(){
	$("h2").text("center pressed");
  });
  
});
  • spremenil: DrYuri ()

usoban ::

Situacija je sledeca ... jQuery.click() funkcija pripne podani callback na elemente, ki jih najde (v tvojem primeru je to ob document ready eventu). Cetudi ti elementu odstranis razred, katerega si uporabil za selector, ima ta se vedno pripet callback od prej. Lahko mu ga odstranis z jQuery.unbind(eventNames), ampak se mi zdi da ti to nekako ne koristi.

Do nedavnega si lahko v takih primerih uporabil jQuery.live(eventName, callbackFn), ampak je od 1.7 deprecated, od 1.9 pa ga sploh ni vec. Namesto njega lahko uporabis
$(document).on(eventName, selector, callbackFn)
, vec pa si preberi na [1], [2].

Tvoj JS pa naj bi izgledal takole:

	$(document).ready(function(){
	  //left
	  $(document).on("click", ".leftPic", function(){
	    //shift right
	    $(".centerPic").addClass("rightPic").removeClass("centerPic");
	    $(this).addClass("centerPic").removeClass("leftPic");
	    $("h2").text("left pressed");
	  });

	  //right
	  $(document).on("click", ".rightPic", function(){
	    $("h2").text("right pressed");
	  });

	  //center
	  $(document).on("click", ".centerPic", function(){
	    $("h2").text("center pressed");
	  });
	   
	});


[1]: http://jquery.com/upgrade-guide/1.9/#li...
[2]: http://api.jquery.com/on/

DrYuri ::

najlepša hvala!!! :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Vprašanje glede java kalkulatorja

Oddelek: Programiranje
61173 (872) techuser
»

[JavaScript] nastavljanje CSS stila v določenem elementu HTML seznama

Oddelek: Izdelava spletišč
7882 (844) iMark
»

jquery in div-i (strani: 1 2 )

Oddelek: Izdelava spletišč
8711247 (9985) lisjak
»

radio onclick ne dela ?!?

Oddelek: Programiranje
7625 (496) vorantz
»

javascript jquey slidshow + dodatek (kako?)

Oddelek: Izdelava spletišč
6800 (737) frudi

Več podobnih tem