Un script établit sur le schéma suivant (moins de 2ko tout compris sans jQuery) me semble pouvoir, en toute hypothèse, être beaucoup plus performant que tous vos développements.
function sndRqu(url,cllbck,pstDta){
var req=xmlObj();
if (!req) return;
var mth=(pstDta)? "POST":"GET";
req.open(mth,url,true);
req.setRequestHeader('User-Agent','XMLHTTP/1.0');
if (pstDta) req.setRequestHeader(
'Content-type','application/x-www-form-urlencoded');
req.onreadystatechange=function(){
if (req.readyState!=4) return;
if (req.status!=200 && req.status!=304) return;
cllbck(req);}
if (req.readyState==4) return;
req.send(pstDta);
};
var xmlFct=[function(){return new XMLHttpRequest()},
function(){return new ActiveXObject("Msxml2.XMLHTTP")},
function(){return new ActiveXObject("Msxml3.XMLHTTP")}];
function xmlObj(){
var xmlhttp=false;
for (var i=0;i<xmlFct.length;i++) {
try{xmlhttp = xmlFct[ i]();}
catch(e){continue;}
break;}
return xmlhttp;
};
function $(i){return document.getElementById(i)}
function init(){var i,t=document.getElementsByTagName('input');
for (i in t)
if (/test/.test(t[ i].className)) t[ i].onclick=clc;
}
function clc(e){var t=e?e.target:window.event.srcElement;
sndRqu("ajax.php?id="+t.id+"&vl="+t.value,
function(r){var w=r.responseText;
if (w) $(w.substr(0,3)).value=w.substr(3);})
}
window.onload=init;
Assortit des boutons ci-après (les attributs
names inutiles pour la démonstration ont été supprimés)
<input type="button" id="ib1" value="non pub" class="test" /> <br />
<input type="button" id="ib2" value="non pub" class="test" /> <br />
<input type="button" id="ib3" value="non pub" class="test" /> <br />
<input type="button" id="ib4" value="autre" class="test" /> <br />
et, pour l'exemple, d'un fichier ajax.php retournant simplement l'identifiant et la nouvelle valeur du bouton :
if (!empty($_GET["id"]) && !empty($_GET["vl"])) {
if ($_GET["vl"]=="non pub") exit($_GET["id"]."pub");
if ($_GET["vl"]=="pub") exit($_GET["id"]."non pub");}
exit();
il devrait répondre à la question posée, sans encombrer inutilement la mémoire du poste client.
Accessoirement les modérateurs simplement intéressés vérifieront aisément qu'une variable, déclarée locale dans la fonction lancée lors du clic sur un bouton, ne sera en général plus disponible dans la fonction de callback de la requête correspondante.
Modifié par Julien de Prabere (17 Mar 2009 - 17:26)