11540 sujets

JavaScript, DOM et API Web HTML5

Salut à tous,

Un petit problème en Javascript pur pour débuter la soirée Smiley lol

Voici la page en question :
http://www.kevinfeutray.fr/test/pixel-admin/index.php?page=articles&action=modify&id=1

les logs sont admin/admin, il faudra c/c l'url a nouveau après s'etre log, désolé.


En cliquant sur supprimer l'image, vous pouvez supprimer l'image de votre choix, mais impossible de supprimer la deuxieme après...

Je ne comprends pas du tout d'ou vient le probleme :

function deletefile(){console.log(this);alert("delete");
	var el = document.getElementById("form-admin");console.log(this);
	this.parentNode.parentNode.removeChild(this.parentNode);
	el.innerHTML += '<input type="hidden" name="deleteimg'+ count2 + '" value="'+ this.previousSibling.src +'"/>'; 
	count2++;
}

var count2 = 1;

var el2 = document.getElementsByClassName("delete-img");
for(var i = 0, j=el2.length; i<j; i++){
    el2[i].addEventListener("click", deletefile, false); 
}


La deuxieme fois ou l'on clique sur supprimer n'affiche pas console.log(this);alert("delete"); (oui, console.log et alert car plus on est de fous plus on rit ! Nan c'est pas ça...?)

Pourtant, la premiere image supprimée peut etre l'une ou l'autre donc le probleme ne vient pas de l'ecouteur d'evenement logiquement...

Je suis un peu perdu sur le coup, si quelqu'un a une idée du pourquoi du comment !

Merci d'avance Smiley smile

ps: Je pense qu'en jQuery, ça passait tout seul en 2min top chrono mais.... mettre autant de ligne pour inclure le jquery que de ligne de traitement JS, je trouvais ça un peu bête, et c'est aussi un challenge, maintenant que j'ai commencé jveux savoir pourquoi ça bloque Smiley murf [/i]


PS2 :
La deuxième chose c'est ces lignes :
	this.parentNode.parentNode.removeChild(this.parentNode);
	el.innerHTML += '<input type="hidden" name="deleteimg'+ count2 + '" value="'+ this.previousSibling.src +'"/>'; 
	count2++;


Il me semblait plus logique de les inverser puisque la premiere supprime l'element correspondant à this.previousSibling.src auquel je fais appel dans la deuxieme ligne.
Mais c'est pourtant dans cette ordre et seulement celui la que la suppresion de la div et l'ajout du champs input fonctionne...Mystère.
Modifié par SpiStache (07 Aug 2014 - 20:21)
Comment j'ai pu raté ça Smiley eek

Finalement j'ai craqué et je l'ai fait en 2 lignes de jquery hier Smiley crash

Mais merci pour ton aide, je dormirai mieux ce soir Smiley lol


PS: Si jamais t'as une idée de pourquoi je dois mettre dans ce sens les lignes que j'avais mis dans le PS2 du premier message, ça reste l'interrogation totale ^^ Sinon c'est pas très grave ça marche !
Modifié par SpiStache (08 Aug 2014 - 09:27)
ça m'étonnerai puisque la première ligne supprime justement l’élément vers lequel pointe le this.previousSibling... c'est bien ça le mystère, je supprime l’élément dans le dom et j'y accède ensuite quand même malgré qu'il soit supprimé.

Par contre si j'inverse les deux lignes (ce qui parait plus logique) pour accéder à l'élément dans le dom, puis le supprimer, rien de marche, il me dit que l’élément this.previousSibling est null.

C'est assez étrange mais bon, ça fonctionne...
Modifié par SpiStache (08 Aug 2014 - 14:05)