11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour, admettons que j'ai le lien suivant :

<a href="truc.php" onclick="maFonction();"> blabla... </a>



Je découvert récemment que pour désactiver le lancement de la page php en javascript il fallait faire

<a href="truc.php" onclick="maFonction(); return false;"> blabla... </a>


mais comment faire lorsque le "binding" n'est pas effectué à l'aide de onclick? (mais dans un js à part) ?
Modérateur
Salut,

var oA = document.getElementsByTagName('a')[0];

oA.onclick = function()
{
     ...
     return false;
}
Modérateur
ou alors :
function cancelClick(e)
{
	if(e && e.stopPropagation && e.preventDefault)
	{
		e.stopPropagation();
		e.preventDefault();
	}
	else if(e && window.event)
	{
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	}

	return false;
}

function connect(oElem, sEvType, fn, bCapture)
{
	return document.addEventListener ?
		oElem.addEventListener(sEvType, fn, bCapture):
		oElem.attachEvent ?
			oElem.attachEvent('on' + sEvType, fn):
			false;
}

function maFonction(e)
{
     ...
     return cancelClick(e);
}

var oA = document.getElementsByTagName('a')[0];

connect(oA, 'click', maFonction, false);
au choix... Smiley lol
Hello,

Si je ne m'abuse "oA" ne contient que le premier lien, attention donc lors de l'implantation du script.


On peut également faire :

var oA = document.getElementsByTagName('a'), h;

for (h=0;h<oA.length;h+=1) {
	if(oA[h].className.indexOf("enhancedLink") != -1){
			oA[h].onclick = function(){
				mafonction();
				return false;
		}
	}
}


et

<a href="mapage.php" class="enhancedLink">A</a>


Le mieux étant d'utiliser match() et addEvent (la fonction proposée sur quirksmode)

Edit : Oups, petit soucis avec le i entre crochet Smiley lol
Modifié par Shinuza (03 Jul 2007 - 16:19)
Merci,

j'ai essayé avec Prototype, j'utilise ceci pour faire le binding



Event.observe($('mon_lien_a'), 'click', maFonction, false);


j'ai placé return false dans maFonction, mais ça ne fonctionne pas (la page php s'ouvre) c'est normal ?
Modérateur
Event.observe fonctionne suivant le même principe que le deuxième exemple que je t'ai montré. (DOM 2)

Ce n'est donc pas un return false; qu'il faut mettre mais l'équivalent de cancelClick(e); soit Event.stop(e); pour Prototype.

PS : La fonction cancelClick(e) fonctionne sur Safari ; ce n'est pas le cas d'Event.stop(e) il me semble.
Modifié par koala64 (03 Jul 2007 - 18:39)