11548 sujets

JavaScript, DOM et API Web HTML5

hello j'ai déjà ma solution mais c'est juste par curiosité;

je débute avec JQuery et en gros, j'ai des images dans le div identifié "navigation" sur lequel j'aimerai exécuter ma fonction "restorePage" : donc j'ai rajouté le onclick comme suit :
$("#navigation img").click(function(){restorePage()});

et j'aurai voulu récupérer des éléments de mes images(comme la source "src" par exemple) dans ma fonction "restorePage" dans ce genre là :
function restorePage(){alert(arguments[0].src)}

je me suis vite rendu compte que le "caller"(arguments[0]) n'était pas mon image mais un "objet image jquery" (si je m'exprime bien?) donc j'ai vite corrigé ma fonction comme tel :
function restorePage(){alert(arguments[0].attr('src'))}

et là je me dis, ça semble fonctionner ... eh ben non, ça me renvoie tout le temps la "src" de ma première image de mon div, quelle que soit l'image sur laquelle je clique .. d'où ma question : EST-CE NORMAL ? ce comportement me semble bizarre et j'ai envie de dire que rien ne vaut le vieux bon "for each img" sans JQuery .. non ?


j'ai résolu mon problème en ajoutant un paramètre ... mais c'est dommage de ne pas pouvoir (ou alors c'est moi qui suis une clinge?) utilisé l'argument caller avec JQuery :
$("#navigation img").click(function(){restorePage(this)});
function restorePage(arg1){alert(arg1.src)}

Vos avis ?
merci d'avance pour vos éclaircissement. Smiley smile
Modifié par bogs (14 Sep 2010 - 22:47)
Modérateur
Salut, Smiley smile

En fait, c'est parce que tu ne cibles pas l'élément correctement.

Pour rester dans l'esprit de ce que tu recherches, tu peux par exemple faire ainsi :
jQuery(
	function() {
	
		function _giveMeSrc() {
		
			alert(_giveMeSrc.caller.arguments[0].target.src);
		
		};
		
		function _clickHandler(e) {
			
			_giveMeSrc();
			
		};
		
		$('#navigation img').click(_clickHandler);
	
	}
);
Au sein de l'alerte, on fait référence à la fonction qui appelle _giveMeSrc par _giveMeSrc.caller (ce qui correspond à la fonction _clickHandler) puis on cible son premier argument par la propriété arguments[0] (celui-ci correspondant à l'événement automatiquement généré au clic) pour enfin récupérer la source (src) de l'élément sur lequel on a cliqué (target).
koala64 a écrit :
Salut, Smiley smile

En fait, c'est parce que tu ne cibles pas l'élément correctement.

Pour rester dans l'esprit de ce que tu recherches, tu peux par exemple faire ainsi :
jQuery(
	function() {
	
		function _giveMeSrc() {
		
			alert(_giveMeSrc.caller.arguments[0].target.src);
		
		};
		
		function _clickHandler(e) {
			
			_giveMeSrc();
			
		};
		
		$('#navigation img').click(_clickHandler);
	
	}
);
Au sein de l'alerte, on fait référence à la fonction qui appelle _giveMeSrc par _giveMeSrc.caller (ce qui correspond à la fonction _clickHandler) puis on cible son premier argument par la propriété arguments[0] (celui-ci correspondant à l'événement automatiquement généré au clic) pour enfin récupérer la source (src) de l'élément sur lequel on a cliqué (target).

merci beaucoup.

j'suis un bon gros débutant .. j'avais simplement oublié le "target" comme un *** Smiley confused


  function restorePage() {alert(arguments[0].target.src)}
  $('#navigation img').click(restorePage);

ceci est mon résultat et fonctionne nickel. encore merci. Smiley smile


edit: je viens de me créer un petit test pour mieux tout comprendre :

<input type="button" value="valeur123" onclick="test('argument1','argument2');" />
<script type="text/javascript" > 
function test(){
	alert(test);
	alert(test.caller);
	alert(test.caller.arguments[0]);
	alert(test.caller.arguments[0].target);
	alert(test.caller.arguments[0].target.value);
	}
</script>

Modifié par bogs (15 Sep 2010 - 15:49)