//cette classe permet de lier un champ select a un autre var SubSelect=Class.create(); SubSelect.prototype={ /** * @param idsel1: le select a utiliser en lien * @param idsel2 : le select a modifier * @param lienDonnees l'url a appeller * //suppose que la valeur nul soit 0 */ initialize:function(idsel1,idsel2,lienDonnees,select,options){ this.idsel=idsel1; this.idsel2=idsel2; this.Ob1=$(idsel1); this.Ob2=$(idsel2); this.options = { arg: 'arg', table: 'result', func:'null', hide:true, 'label':'libelle', 'value':'value', 'defaultChoose':true }.extend(options || {}); //alert('toto'); this.lienDonnees=lienDonnees; this.test=1; this.select=select; Event.observe(this.Ob1,'change',this.lanceFiltre.bindAsEventListener(this)); Event.observe(this.Ob2,'change',this.upVal.bindAsEventListener(this)); if(this.select&&this.select!=''){ new_option = new Option(this.select,this.select); this.Ob2.options[this.Ob2.length]=new_option; this.Ob2.options[this.Ob2.length-1].selected = true; } //ajaxEngine.registerRequest( 'filtre'+idsel1, lienDonnees); //ajaxEngine.registerAjaxObject( IdData,this ); this.lanceFiltre(); }, upVal:function(evt){ this.select=$F(this.idsel2); }, lanceFiltre:function (evt){ valeur=$F(this.idsel); pars=this.options.arg+'='+valeur; var uri=this.lienDonnees+'&'+this.options.arg+'='+valeur; if(this.options.func!='null'){ uri+=this.options.func.apply(window,[]); } // alert (uri); if(valeur!='0'&&valeur!=''){ //alert('valeur vaux'+valeur+'|'); var myAjax5 = new Ajax.Request( uri, { method : "post", parameters : pars, asynchronous : true,evalScripts:true, onComplete:this.ajaxUpdate,objetLie:this}); //ajaxEngine.sendRequest('filtre'+this.idsel,"args="+valeur,"idretour="+this.IdData); }else{ //alert('je cache'+this.idsel2); if(this.options.hide){ Element.hide(this.idsel2); }else{ lo=this.Ob2.length; for (i=lo; i>=0; i--) { this.Ob2.options[i]=null; } new_option = new Option(this.options.msg+'',0); //alert('test'); this.Ob2.options[this.Ob2.length]=new_option; this.Ob2.selectedIndex=-1; try{ this.Ob2.fireEvent('onchange'); }catch(e){ var evt = document.createEvent("HTMLEvents"); evt.initEvent('change', true, true ); // event type,bubbling,cancelable this.Ob2.dispatchEvent(evt); } } } }, ajaxUpdate:function(ajaxResponse){ for(var i in this){ // alert(i+' '+this[i]); } //alert(ajaxResponse.responseText); eval('var res='+ajaxResponse.responseText); var libTab=this.options.table; res=res[libTab]; Element.show(this.idsel2); max=res.length; // remise a 0 du tableau d lo=this.Ob2.length; for (i=lo; i>=0; i--) { this.Ob2.options[i]=null; } if((this.options.defaultChoose)){ this.Ob2.options[0]= new Option('',''); } lib=this.options.label; val=this.options.value; for(i=0;i