Newsgroup: it.comp.lang.javascript
Titolo: Compatibilita IE8

Salve a tutti, qualcuno puo' illuminrmi sul perche questa funziona
funziona con tutti i browser da Firefox a IE7 e Chrome ma non con IE8
Non sono un programmatore Javascript ma ho trovato e utilizzato con
successo questa porzione di codice per fare il parsing delle date dal
formato americano a quello europeo
in IE8 quando esequo la pagine con delle deta in una tabella mi si
blocca tutto e mi viene cacciato un errore di tipo: 'undefined' is
null or not an object
Questa e' la funione
function cp(f,c){
        var dX,mX,aX,fX,dY,mY,aY,fY,pos,pos2;
        var g,h; f=g=f.v.toLowerCase(), c=h=c.v.toLowerCase();
        var i=parseFloat(f.replace(/(\€|\,)/g,'')),
n=parseFloat(c.replace(/(\€|\,)/g,''));
        if(!isNaN(i)&&!isNaN(n)){g=i,h=n}
        pos = f.indexOf("/"); pos2 = f.lastIndexOf("/");
        dX=f.substring(0,pos); mX=f.substring(pos+1,pos2);
aX=f.substring(pos2+1,(pos2)+5);
        fX=mX+"/"+dX+"/"+aX;
        dY=c.substring(0,pos); mY=c.substring(pos+1,pos2);
aY=c.substring(pos2+1,(pos2)+5);
        fY=mY+"/"+dY+"/"+aY;
        i=Date.parse(fX); n=Date.parse(fY);
        if(!isNaN(i)&&!isNaN(n)){g=i; h=n}
        return g>h?1:(g<h?-1:0)
};
...qualcuno conosce un rimedio?
Grazie
Andrea

 ha scritto nel messaggio 
news:848741b9-51fb-4268...@e1g2000yqh.googlegroups.com...
Salve a tutti, qualcuno puo' illuminrmi sul perche questa funziona
funziona con tutti i browser da Firefox a IE7 e Chrome ma non con IE8
Non sono un programmatore Javascript ma ho trovato e utilizzato con
successo questa porzione di codice per fare il parsing delle date dal
formato americano a quello europeo
in IE8 quando esequo la pagine con delle deta in una tabella mi si
blocca tutto e mi viene cacciato un errore di tipo: 'undefined' is
null or not an object
http://www.w3schools.com/jsref/jsref_obj_date.asp
 

 ha scritto nel messaggionews:848741b9-51fb-4268...@e1g2000yqh.googlegroups.com...

Grazie li ci arrivavo anche sensa chiedere aiuto su un forum...
Purtroppo non ho esperienza con Javascript e sopratutto sul fatto che
questo errore esiste solo su IE8

 function cp(f,c){
cosa sono f e c?


Ciao, penso che c sia la cella di una tabella f no saprei.
lo script e' il TinyTable v3 di Leigeber
http://www.leigeber.com/2009/11/advanced-javascript-table-sorter/
Script fantastico ma che ha il problema di non gestire solo le date in
formato Americano qundi il sort delle fate europee non funziona.
Il codice che ho usato risolve il problema per tutti i browsere tranne
IE8
Ti posto qui di segui to tutto ilo script, alla fine trovi commentato
il codice originale e subito sopra quello che ho provato ad usare:
-----------------------------
var TINY={};
function T$(i){return document.getElementById(i)}
function T$$(e,p){return p.getElementsByTagName(e)}
TINY.table=function(){
	function sorter(n,t,p){this.n=n; 
this.id
=t; this.p=p; if(this.p.init)
{this.init()}}
	sorter.prototype.init=function(){
		this.set(); var t=this.t, i=d=0; t.h=T$$('tr',t)[0];
		t.l=t.r.length; t.w=t.r[0].cells.length; t.a=[]; t.c=[];
this.p.is
=this.p.size;
		if(this.p.colddid){
			d=T$(this.p.colddid);
			var o=document.createElement('option'); o.value=-1;
o.innerHTML='Tutte le colonne'; d.appendChild(o)
		}
		for(i;i<t.w;i++){
			var c=t.h.cells[i]; t.c[i]={};
			if(c.className!='nosort'){
				c.className=this.p.headclass; c.onclick=new Function(this.n
+'.sort('+i+')');
				c.onmousedown=function(){return false};
			}
			if(this.p.columns){
				var l=this.p.columns.length, x=0;
				for(x;x<l;x++){
					if(this.p.columns[x].index==i){
						var g=this.p.columns[x];
						t.c[i].format=g.format==null?1:g.format;
t.c[i].decimals=g.decimals==null?2:g.decimals
					}
				}
			}
			if(d){
				var o=document.createElement('option'); o.value=i; o.innerHTML=T$$
('h3',c)[0].innerHTML; d.appendChild(o)
			}
		}
		this.reset()
	};
	sorter.prototype.reset=function(){
		var t=this.t; t.t=t.l;
		for(var i=0;i<t.l;i++){t.a[i]={}; t.a[i].s=1}
		if(this.p.sortcolumn!=undefined){
			this.sort(this.p.sortcolumn,1,
this.p.is
)
		}else{
			if(this.p.paginate){this.size()} this.alt(); this.sethover()
		}
		this.calc()
	};
	sorter.prototype.sort=function(x,f,z){
		var t=this.t; t.y=x; var x=t.h.cells[t.y], i=0,
n=document.createElement('tbody');
		for(i;i<t.l;i++){
			t.a[i].o=i; var v=t.r[i].cells[t.y]; t.r[i].style.display='';
			while(v.hasChildNodes()){v=v.firstChild}
			t.a[i].v=v.nodeValue?v.nodeValue:''
		}
		for(i=0;i<t.w;i++){var c=t.h.cells[i]; if(c.className!='nosort')
{c.className=this.p.headclass}}
		if(t.p==t.y&&!f){t.a.reverse(); x.className=t.d?
this.p.ascclass:this.p.descclass; t.d=t.d?0:1}
		else{t.p=t.y; f&&this.p.sortdir==-1?
t.a.sort(cp).reverse():t.a.sort(cp); t.d=0;
x.className=this.p.ascclass}
		for(i=0;i<t.l;i++){var r=t.r[t.a[i].o].cloneNode(true);
n.appendChild(r)}
		t.replaceChild(n,t.b); this.set(); this.alt(); if(this.p.paginate)
{this.size(z)} this.sethover()
	};
	sorter.prototype.sethover=function(){
		if(this.p.hoverid){
			for(var i=0;i<this.t.l;i++){
				var r=this.t.r[i];
				r.setAttribute('onmouseover',this.n+'.hover('+i+',1)');
				r.setAttribute('onmouseout',this.n+'.hover('+i+',0)')
			}
		}
	};
	sorter.prototype.calc=function(){
		if(this.p.sum||this.p.avg){
			var t=this.t, i=x=0, f,r;
			if(!T$$('tfoot',t)[0]){
				f=document.createElement('tfoot'); t.appendChild(f)
			}else{
				f=T$$('tfoot',t)[0]; while(f.hasChildNodes())
{f.removeChild(f.firstChild)}
			}
			if(this.p.sum){
				r=this.newrow(f);
				for(i;i<t.w;i++){
					var j=r.cells[i];
					if(this.p.sum.exists(i)){
						var s=0, m=t.c[i].format||'';
						for(x=0;x<this.t.l;x++){
							if(t.a[x].s){s+=parseFloat(t.r[x].cells[i].innerHTML.replace(/(\
$|\,)/g,''))}
						}
						s=decimals(s,t.c[i].decimals?t.c[i].decimals:2);
						s=isNaN(s)?'n/a':m=='$'?s=s.currency(t.c[i].decimals):s+m;
						r.cells[i].innerHTML=s
					}else{r.cells[i].innerHTML='&nbsp;'}
				}
			}
			if(this.p.avg){
				r=this.newrow(f);
				for(i=0;i<t.w;i++){
					var j=r.cells[i];
					if(this.p.avg.exists(i)){
						var s=c=0, m=t.c[i].format||'';
						for(x=0;x<this.t.l;x++){
							if(t.a[x].s){s+=parseFloat(t.r[x].cells[i].innerHTML.replace(/(\
$|\,)/g,'')); c++}
						}
						s=decimals(s/c,t.c[i].decimals?t.c[i].decimals:2);
						s=isNaN(s)?'n/a':m=='$'?s=s.currency(t.c[i].decimals):s+m;
						j.innerHTML=s
					}else{j.innerHTML='&nbsp;'}
				}
			}
		}
	};
	sorter.prototype.newrow=function(p){
		var r=document.createElement('tr'), i=0; p.appendChild(r);
		for(i;i<this.t.w;i++){r.appendChild(document.createElement('td'))}
		return r
	};
	sorter.prototype.alt=function(){
		var t=this.t, i=x=0;
		for(i;i<t.l;i++){
			var r=t.r[i];
			if(t.a[i].s){
				r.className=x%2==0?this.p.evenclass:this.p.oddclass; var cells=T$$
('td',r);
				for(var z=0;z<t.w;z++){cells[z].className=t.y==z?x%2==0?
this.p.evenselclass:this.p.oddselclass:''}
				x++
			}
			if(!t.a[i].s){r.style.display='none'}
		}
	};
 
sorter.prototype.page
=function(s){
		var t=this.t, i=x=0, l=s+parseInt(this.p.size);
		if(this.p.totalrecid){T$(this.p.totalrecid).innerHTML=t.t}
		if(this.p.currentid){T$(this.p.currentid).innerHTML=this.g}
		if(this.p.startingrecid){
			var b=((this.g-1)*this.p.size)+1, m=b+(this.p.size-1); m=m<t.l?
m:t.t; m=m<t.t?m:t.t;
			T$(this.p.startingrecid).innerHTML=t.t==0?0:b;; T$
(this.p.endingrecid).innerHTML=m
		}
		for(i;i<t.l;i++){var r=t.r[i]; if(t.a[i].s)
{r.style.display=x>=s&&x<l?'':'none'; x++}
else{r.style.display='none'}}
	};
	sorter.prototype.move=function(d,m){
		this.goto(d==1?(m?this.d:this.g+1):(m?1:this.g-1))
	};
	sorter.prototype.goto=function(s){
		if(s<=this.d&&s>0){this.g=s; 
this.page
((s-1)*this.p.size)}
	};
	sorter.prototype.size=function(s){
		var t=this.t;
		if(s){this.p.size=s}
		this.g=1; this.d=Math.ceil(this.t.t/this.p.size);
		if(this.p.navid){T$
(this.p.navid).style.display=this.d<2?'none':'block'}
 
this.page
(0);
		if(this.p.totalid){T$(this.p.totalid).innerHTML=t.t==0?1:this.d}
		if(this.p.pageddid){
			var d=T$(this.p.pageddid), l=this.d+1;
			d.setAttribute('onchange',this.n+'.goto(this.value)');
			while(d.hasChildNodes()){d.removeChild(d.firstChild)}
			for(var i=1;i<=this.d;i++){
				var o=document.createElement('option');
				o.value=i; o.innerHTML=i; d.appendChild(o)
			}
		}
	};
	sorter.prototype.showall=function(){
		this.size(this.t.t)
	};
	sorter.prototype.search=function(f){
		var i=x=n=0, k=-1, q=T$(f).value.toLowerCase();
		if(this.p.colddid){k=T$(this.p.colddid).value}
		var s=(k==-1)?0:k, e=(k==-1)?this.t.w:parseInt(s)+1;
		for(i;i<this.t.l;i++){
			var r=this.t.r[i], v;
			if(q==''){
				v=1
			}else{
				for(x=s;x<e;x++){
					var b=r.cells[x].innerHTML.toLowerCase();
					if(b.indexOf(q)==-1){v=0}else{v=1; break}
				}
			}
			if(v){n++}
			this.t.a[i].s=v
		}
		this.t.t=n;
		if(this.p.paginate){this.size()}
		this.calc(); this.alt()
	};
	sorter.prototype.hover=function(i,d){
		this.t.r[i].id=d?this.p.hoverid:''
	};
	sorter.prototype.set=function(){
		var t=T$(
this.id
); t.b=T$$('tbody',t)[0]; t.r=t.b.rows; this.t=t
	};
	Array.prototype.exists=function(v){
		for(var i=0;i<this.length;i++){if(this[i]==v){return 1}} return 0
	};
	Number.prototype.currency=function(c){
		var n=this, d=n.toFixed(c).split('.');
		d[0]=d[0].split('').reverse().join('').replace(/(\d{3})(?=\d)/
g,'$1,').split('').reverse().join('');
		return '$'+d.join('.')
	};
	function decimals(n,d){return Math.round(n*Math.pow(10,d))/
Math.pow(10,d)};
	function cp(f,c){
		var dX,mX,aX,fX,dY,mY,aY,fY,pos,pos2;
		var g,h; f=g=f.v.toLowerCase(), c=h=c.v.toLowerCase();
		var i=parseFloat(f.replace(/(\€|\,)/g,'')), n=parseFloat(c.replace(/
(\€|\,)/g,''));
		if(!isNaN(i)&&!isNaN(n)){g=i,h=n}
		pos = f.indexOf("/"); pos2 = f.lastIndexOf("/");
		dX=f.substring(0,pos); mX=f.substring(pos+1,pos2);
aX=f.substring(pos2+1,(pos2)+5);
		fX=mX+"/"+dX+"/"+aX;
		dY=c.substring(0,pos); mY=c.substring(pos+1,pos2);
aY=c.substring(pos2+1,(pos2)+5);
		fY=mY+"/"+dY+"/"+aY;
		i=Date.parse(fX); n=Date.parse(fY);
		if(!isNaN(i)&&!isNaN(n)){g=i; h=n}
		return g>h?1:(g<h?-1:0)
/*  Parte originale che non funziona con le date europee
		var g,h; f=g=f.v.toLowerCase(); c=h=c.v.toLowerCase();
		var i=parseFloat(f.replace(/(\$|\,)/g,'')), n=parseFloat(c.replace(/
(\$|\,)/g,''));
		if(!isNaN(i)&&!isNaN(n)){g=i,h=n}
		i=Date.parse(f); n=Date.parse(c);
		if(!isNaN(i)&&!isNaN(n)){g=i; h=n}
		return g>h?1:(g<h?-1:0)
*/
	};
	return{sorter:sorter}
}();

 codice originale e subito sopra quello che ho provato ad usare:
[CUT]
passo, non ho 2 giorni di tempo per studiarmi 'sta roba. Visto che usi 
roba "scopiazzata" dalla rete, io chiederei all'autore...


...grazie lo stesso per la diponibilita'.
cmq usare tool free messi a diposizione in rete non credeo si possa
definire "scopiazzare"
Buona giornta

 diposizione in rete non credeo si possa definire "scopiazzare"
Non era in senso negativo. 
Però se si usano tool free messi a disposizione in rete e qualcosa non va 
occorre rivolgersi a chi li ha fatti ... poi certo, se uno è fortunello 
può trovare anche in forum o newsgroup come questo qualcuno che ha già 
avuto quei problemi e così indica come risolverli; ma solo se è 
fortunello.
E' invece molto difficile trovare qualcuno che mette tempo e testa a 
studiarsi tutto il codice per capire come modificarlo, io (e immagino non 
solo io) farei prima a rifarlo ex-novo...


si certo e' comprensibilissimo...forse non lo farei neanche io :)
la versione precendente di questo tool gira su una mia soluzione da
tempo e volevo upgradare a questa ultima release che ha molte feature
in piu.
Pare che a sti americani delle date in formato europeo non importi
molto :)
Mi sono rivolto a questo newsgroup perche appuntno non so piu dove
sbattere la testa... speravo di essere piu' "fortunello" :)
Grazie cmq!
Dex