Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 11 of 11
  1. #1
    New to the CF scene
    Join Date
    Jun 2011
    Posts
    3
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Filtering Lists based on Variables

    Hi, I have a large e-commerce site that runs on a database. There are many products on the site which have 'variables' attached to them, e.g. colour, width, height etc.
    I have a script in place to sort the products depending on these variables.
    Apologies for the length of the code.

    Code:
    (function(i) {var u =navigator.userAgent;var e=/*@cc_on!@*/false; var st =
    setTimeout;if(/webkit/i.test(u)){st(function(){var dr=document.readyState;
    if(dr=="loaded"||dr=="complete"){i()}else{st(arguments.callee,10);}},10);}
    else if((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))){
    document.addEventListener("DOMContentLoaded",i,false); } else if(e){     (
    function(){var t=document.createElement('doc:rdy');try{t.doScroll('left');
    i();t=null;}catch(e){st(arguments.callee,0);}})();}})(sortinit);
    
    
    var prodlines = new Array();		// for Products
    var spanids = new Array();
    var lastsorttype = 'default';
    var bReadyToSort = false;
    
    var searchlines = new Array();		// for Search Results
    var searchspanids = new Array();
    var searchlastsorttype = 'default';
    var bSearchReadyToSort = false;
    
    var sectlines = new Array();		// for Sections
    var sectspanids = new Array();
    var sectlastsorttype = 'default';
    var bSectReadyToSort = false;
    
    var bSortInitalised = false;
    
    //  Search Results Related
    function searchreseq(seqtype){			// resequence search results
    	if ( ! (bSearchReadyToSort || bPageIsLoaded) )
    		{
    		alert('Please wait until the page has fully loaded. (SRC)');
    		return false;
    		}
    	searchlines.length = 0;
    	searchspanids.length = 0;
    	var spans = document.getElementsByTagName('span');
    	for ( var i=0; i<spans.length; i++ )
    		{
    		if ( spans[i].id.indexOf('searchsortline_') == 0 )
    			{
    			searchspanids.push(spans[i]);
    			searchlines.push({
    				id: spans[i].id, 
    				price: spans[i].getAttribute('price').replace(/[^\d\.]/g,''), 
    				seq: spans[i].getAttribute('seq'), 
    				pname: spans[i].getAttribute('pname'),
    				phtml: spans[i].innerHTML
    				});
    			}
    		}
    	
    		
    	if ( seqtype == 'lowhigh' ) searchlines.sort(function(a,b){return a.price - b.price});
    	if ( seqtype == 'highlow' ) searchlines.sort(function(a,b){return b.price - a.price});
    	if ( seqtype == 'default' ) searchlines.sort(function(a,b){return a.seq - b.seq});
    	if ( seqtype == 'alpha' )   searchlines.sort(function(a,b){return (a.pname <= b.pname) ? -1 : 1;});
    	if ( seqtype == 'reverse' ) searchlines.sort(function(a,b){return (b.pname <= a.pname) ? -1 : 1;});
    	searchlastsorttype = seqtype;
    	setCookie('SEARCHSORTTYPE', searchlastsorttype);
    	searchshowsorttype();
    	for ( var i=0; i<searchlines.length; i++ )
    		{
    		searchspanids[i].innerHTML = searchlines[i].phtml;
    		searchspanids[i].id = searchlines[i].id; 
    		searchspanids[i].setAttribute('price', searchlines[i].price); 
    		searchspanids[i].setAttribute('seq', searchlines[i].seq); 
    		searchspanids[i].setAttribute('pname', searchlines[i].pname); 
    		}
    	return false;
    }
    
    function searchshowsorttype(){		// highlight the type of sort that's currently in use
    	if ( document.getElementById('searchsortdropdown') )	// see if we're using drop-downs
    		{
    		var dropdowns = document.getElementsByTagName('select');	// all drop-downs		
    		for ( var i=0; i<dropdowns.length; i++ )
    			{
    			if ( dropdowns[i].name == 'searchsortdropdown' )		// relevant one
    				{
    				var sdd = dropdowns[i];
    				for ( var j=0; j<sdd.options.length; j++ )
    					{
    					if ( sdd.options[j].value == searchlastsorttype ) sdd.selectedIndex = j;
    					}
    				}
    			}	
    		}	
    	else								
    		{
    		var buttonlinks = document.getElementsByTagName('input');	// looking for buttons
    		for ( var i=0; i<buttonlinks.length; i++ )
    			{
    			if ( buttonlinks[i].name == 'searchsortlink' )
    				{
    				buttonlinks[i].className = ( buttonlinks[i].id == searchlastsorttype ) ? 'searchsortactive' : 'searchsortinactive';
    				}	
    			}
    		var buttonlinks = document.getElementsByTagName('a');		// looking for A tags
    		for ( var i=0; i<buttonlinks.length; i++ )
    			{
    			if ( buttonlinks[i].name == 'searchsortlink' )
    				{
    				buttonlinks[i].className = ( buttonlinks[i].id == searchlastsorttype ) ? 'searchsortactive' : 'searchsortinactive';
    				}	
    			}
    		}
    }
    
    
    // Section Related
    function sectionseq(seqtype){			// resequence Sections
    	if ( ! (bSectReadyToSort || bPageIsLoaded) )
    		{
    		alert('Please wait until the page has fully loaded. (SECT)');
    		return false;
    		}
    	sectlines.length = 0; 
    	sectspanids.length = 0;					
    	var spans = document.getElementsByTagName('span');
    	for ( var i=0; i<spans.length; i++ )
    		{
    		if ( spans[i].id.indexOf('sectionline_') == 0 )
    			{
    			sectspanids.push(spans[i]);
    			sectlines.push({	
    				id: spans[i].id, 
    				price: spans[i].getAttribute('price'), 
    				seq: spans[i].getAttribute('seq'), 
    				pname: spans[i].getAttribute('pname'),
    				phtml: spans[i].innerHTML
    				});
    			}
    		}
    	
    	if ( seqtype == 'lowhigh' ) sectlines.sort(function(a,b){return a.price - b.price});
    	if ( seqtype == 'highlow' ) sectlines.sort(function(a,b){return b.price - a.price});
    	if ( seqtype == 'default' ) sectlines.sort(function(a,b){return a.seq - b.seq});
    	if ( seqtype == 'alpha' )   sectlines.sort(function(a,b){return (a.pname <= b.pname) ? -1 : 1;});
    	if ( seqtype == 'reverse' ) sectlines.sort(function(a,b){return (b.pname <= a.pname) ? -1 : 1;});
    	sectlastsorttype = seqtype;
    	setCookie('SECTSORTTYPE', sectlastsorttype);
    	sectshowsorttype();
    	for ( var i=0; i<sectlines.length; i++ )
    		{
    		sectspanids[i].innerHTML = sectlines[i].phtml;
    		sectspanids[i].id = sectlines[i].id; 
    		sectspanids[i].setAttribute('price', sectlines[i].price); 
    		sectspanids[i].setAttribute('seq', sectlines[i].seq); 
    		sectspanids[i].setAttribute('pname', sectlines[i].pname); 
    		}
    	return false;
    }
    
    function sectshowsorttype(){		// highlight the type of sort that's currently in use
    	if ( document.getElementById('sectionsortdropdown') )	// see if we're using drop-downs
    		{
    		var dropdowns = document.getElementsByTagName('select');	// all drop-downs		
    		for ( var i=0; i<dropdowns.length; i++ )
    			{
    			if ( dropdowns[i].name == 'sectionsortdropdown' )		// relevant one
    				{
    				var sdd = dropdowns[i];
    				for ( var j=0; j<sdd.options.length; j++ )
    					{
    					if ( sdd.options[j].value == sectlastsorttype ) sdd.selectedIndex = j;
    					}
    				}
    			}	
    		}	
    	else								
    		{
    		var buttonlinks = document.getElementsByTagName('input');	// looking for buttons
    		for ( var i=0; i<buttonlinks.length; i++ )
    			{
    			if ( buttonlinks[i].name == 'sectsortlink' )
    				{
    				buttonlinks[i].className = ( buttonlinks[i].id == sectlastsorttype ) ? 'sectsortactive' : 'sectsortinactive';
    				}	
    			}
    		var buttonlinks = document.getElementsByTagName('a');		// looking for A tags
    		for ( var i=0; i<buttonlinks.length; i++ )
    			{
    			if ( buttonlinks[i].name == 'sectsortlink' )
    				{
    				buttonlinks[i].className = ( buttonlinks[i].id == sectlastsorttype ) ? 'sectsortactive' : 'sectsortinactive';
    				}	
    			}
    		}
    }
    
    // Product Related
    function reseq(seqtype, gotoanchor){			// resequence products
    	if ( ! (bReadyToSort || bPageIsLoaded) )
    		{
    		alert('Please wait until the page has fully loaded. (PROD)');
    		return false;
    		}
    	prodlines.length = 0;
    	spanids.length = 0;
    	var spans = document.getElementsByTagName('span');
    	for ( var i=0; i<spans.length; i++ )
    		{
    		if ( spans[i].id.indexOf('sortline_') == 0 )
    			{
    			spanids.push(spans[i]);
    			prodlines.push({
    				id: spans[i].id, 
    				price: spans[i].getAttribute('price'), 
    				seq: spans[i].getAttribute('seq'), 
    				pname: spans[i].getAttribute('pname'),
    				brand: spans[i].getAttribute('brand'),
    				capacity: spans[i].getAttribute('capacity'),
    				height: spans[i].getAttribute('height'),
    				width: spans[i].getAttribute('width'),
    				depth: spans[i].getAttribute('depth'),
    				colour: spans[i].getAttribute('colour'),
    				energyrating: spans[i].getAttribute('energyrating'),
    				spinspeed: spans[i].getAttribute('spinspeed'),
    				phtml: spans[i].innerHTML
    				});
    			}
    		}
    		
    	if ( seqtype == 'lowhigh' ) prodlines.sort(function(a,b){return a.price - b.price});
    	if ( seqtype == 'highlow' ) prodlines.sort(function(a,b){return b.price - a.price});
    	if ( seqtype == 'default' ) prodlines.sort(function(a,b){return a.seq - b.seq});
    	if ( seqtype == 'alpha' )   prodlines.sort(function(a,b){return (a.pname <= b.pname) ? -1 : 1;});
    	if ( seqtype == 'reverse' ) prodlines.sort(function(a,b){return (b.pname <= a.pname) ? -1 : 1;});
    	if ( seqtype == 'brand' )  prodlines.sort(function(a,b){return (a.brand <= b.brand) ? -1 : 1;});
    	if ( seqtype == 'capacity' )  prodlines.sort(function(a,b){return (b.capacity <= a.capacity) ? -1 : 1;});
    	if ( seqtype == 'height' )  prodlines.sort(function(a,b){return (a.height <= b.height) ? -1 : 1;});
    	if ( seqtype == 'width' )  prodlines.sort(function(a,b){return (a.width <= b.width) ? -1 : 1;});
    	if ( seqtype == 'depth' )  prodlines.sort(function(a,b){return (a.depth <= b.depth) ? -1 : 1;});
    	if ( seqtype == 'colour' )  prodlines.sort(function(a,b){return (a.colour <= b.colour) ? -1 : 1;});
    	if ( seqtype == 'energyrating' )  prodlines.sort(function(a,b){return (a.energyrating <= b.energyrating) ? -1 : 1;});
    	if ( seqtype == 'spinspeed' )  prodlines.sort(function(a,b){return (b.spinspeed <= a.spinspeed) ? -1 : 1;});
    	lastsorttype = seqtype;
    	setCookie('SORTTYPE', lastsorttype);
    	showsorttype();
    	for ( var i=0; i<prodlines.length; i++ )
    		{
    		spanids[i].innerHTML = prodlines[i].phtml;
    		spanids[i].id = prodlines[i].id; 
    		spanids[i].setAttribute('price', prodlines[i].price); 
    		spanids[i].setAttribute('seq', prodlines[i].seq); 
    		spanids[i].setAttribute('pname', prodlines[i].pname);
    		spanids[i].setAttribute('brand', prodlines[i].brand);
    		spanids[i].setAttribute('capacity', prodlines[i].capacity);
    		spanids[i].setAttribute('height', prodlines[i].height);
    		spanids[i].setAttribute('width', prodlines[i].width);
    		spanids[i].setAttribute('depth', prodlines[i].depth);
    		spanids[i].setAttribute('colour', prodlines[i].colour);
    		spanids[i].setAttribute('energyrating', prodlines[i].energyrating);
    		spanids[i].setAttribute('spinspeed', prodlines[i].spinspeed); 
    		}
    	if ( gotoanchor && location.hash ) scrolltoanchor(location.hash);	// Product Page just loaded and Anchor so we need to reposition
    
    	//
    	//  Some Drillpine add-ons need reactivated after the DOM has been fiddled with
    	//
    	
    	// Tabber (needs V210 onwards) - reset Tabber
    	if ( window.resetallpanes ) resetallpanes();
    	
    	// Tabber V3
    	if ( window.jqinittabber ) jqinittabber();
    	
    
    	// Lightbox / Slimbox
    	if ( window.Slimbox && window.Slimbox.scanPage ) Slimbox.scanPage();
    	
    	// Lightbox / Slimbox2
    	if ( (typeof(jQuery) == 'function') && (typeof(jQuery.slimbox) == 'function') )
    		{
    		$("a[rel^='lightbox']").slimbox({/* Put custom options here */}, null, function(el) {
    		return (this == el) || ((this.rel.length > 8) && (this.rel == el.rel));
    		});
    		}
    		
    	return false;
    }
    	
    function showsorttype(){		// highlight the type of sort that's currently in use
    	if ( document.getElementById('sortdropdown') )	// see if we're using drop-downs
    		{
    		var dropdowns = document.getElementsByTagName('select');	// all drop-downs		
    		for ( var i=0; i<dropdowns.length; i++ )
    			{
    			if ( dropdowns[i].name == 'sortdropdown' )		// relevant one
    				{
    				var sdd = dropdowns[i];
    				for ( var j=0; j<sdd.options.length; j++ )
    					{
    					if ( sdd.options[j].value == lastsorttype ) sdd.selectedIndex = j;
    					}
    				}
    			}	
    		}	
    	else								
    		{
    		var buttonlinks = document.getElementsByTagName('input');	// looking for buttons
    		for ( var i=0; i<buttonlinks.length; i++ )
    			{
    			if ( buttonlinks[i].name == 'sortlink' )
    				{
    				buttonlinks[i].className = ( buttonlinks[i].id == lastsorttype ) ? 'sortactive' : 'sortinactive';
    				}	
    			}
    		var buttonlinks = document.getElementsByTagName('a');		// looking for A tags
    		for ( var i=0; i<buttonlinks.length; i++ )
    			{
    			if ( buttonlinks[i].name == 'sortlink' )
    				{
    				buttonlinks[i].className = ( buttonlinks[i].id == lastsorttype ) ? 'sortactive' : 'sortinactive';
    				}	
    			}
    		}
    }
    
    // General code
    
    function hidetagswithid(tag, id){	// hide all tags with ID
    	var alltags = document.getElementsByTagName(tag);  		// all such tags
    	for ( var i=0; i<alltags.length; i++ )
    		{
    		if ( alltags[i].id == id )				// with ID
    			{
    			alltags[i].style.display = 'none'; 			// hide entire control
    			alltags[i].style.visibility = 'hidden';			// hide entire control
    			}
    		}
    }
    
    function scrolltoanchor(anc){	// reposition to display anchor
    	var ancs = document.getElementsByTagName('a');
    	anc = anc.replace(/.*\#/,'');		// Search highlight passes duplicate anchors - lose one
    	if ( ancs[anc] ) ancs[anc].scrollIntoView(true);
    }
    
    function sortinit(){				// called when DOM is loaded
    	if (arguments.callee.done) return;
    	arguments.callee.done = true;
    	bSortInitialised = true;
    	// Products
    	if ( document.getElementById('sortwidget') ) 
    		{
    		bReadyToSort = true;
    		lastsorttype = getCookie('SORTTYPE');
    		if ( lastsorttype == null ) lastsorttype = 'default';
    		setCookie('SORTTYPE', lastsorttype);
    		showsorttype();		
    		if ( lastsorttype != 'default' ) 
    			{
    			reseq(lastsorttype, true);
    			}
    		}	
    
    	// Search Results
    	if ( document.getElementById('searchsortwidget') ) 
    		{
    		bSearchReadyToSort = true;
    		searchlastsorttype = getCookie('SEARCHSORTTYPE');
    		if ( searchlastsorttype == null ) searchlastsorttype = 'default';
    		setCookie('SEARCHSORTTYPE', searchlastsorttype);
    		searchshowsorttype();		
    		if ( searchlastsorttype != 'default' ) 
    			{
    			searchreseq(searchlastsorttype);
    			}
    		}	
    		
    	// Sections
    	if ( document.getElementById('sectsortwidget') ) 
    		{
    		// check for no prices available and hide buttons if so	
    		var spans = document.getElementsByTagName('span');
    		var rtot = 0;	
    		for ( var i=0; i<spans.length; i++ )
    			{
    			if ( spans[i].id.indexOf('sectionline_') == 0 )
    				{
    				var price = spans[i].getAttribute('price');
    				rtot += (price != null) ? price - 0 : 0;
    				}
    			}
    		if ( rtot == 0 )
    			{
    			if ( SectionSortLinksFinalOnly )					// do we only show links on final Sections
    				{
    				hidetagswithid('span', 'sectsortwidget');			// hide all sort widgets
    				}
    			else
    				{	
    				if ( document.getElementById('sectpricelinks') )		// button or text links
    					{
    					hidetagswithid('span', 'sectpricelinks');
    					}
    				if ( document.getElementById('sectionsortdropdown') )		// drop-down list
    					{
    					var dropdowns = document.getElementsByTagName('select');	// all drop-downs		
    					for ( var i=0; i<dropdowns.length; i++ )
    						{
    						if ( dropdowns[i].id == 'sectionsortdropdown' )		// relevant one
    							{
    							var opts = dropdowns[i].options;
    							for ( var j=opts.length; j>0; j-- )		// scan backwards as we're deleting items
    								{
    								if ( (opts[j - 1].value == "lowhigh") || (opts[j - 1].value == "highlow") )
    									{
    									opts[j - 1] = null;
    									}
    								}
    							}
    						}			
    					}
    				}	
    			}			
    
    		bSectReadyToSort = true;
    		sectlastsorttype = getCookie('SECTSORTTYPE');
    		if ( sectlastsorttype == null ) sectlastsorttype = 'default';
    		setCookie('SECTSORTTYPE', sectlastsorttype);
    		sectshowsorttype();
    		// only resequence if button showing and we've a non default sequence		
    		if ( (document.getElementById('sectsortwidget').style.display != 'none') && (sectlastsorttype != 'default') ) 
    			{
    			sectionseq(sectlastsorttype);
    			}
    			
    		}
    }
    
    function onloadsortinit(){			// optionally called on onload
    	if ( ! bSortInitalised ) sortinit();				// only init if it's not already run
    }
    
    // in case we cannot activate on DOM loaded
    if (window.attachEvent) 						// IE 
    	{ 
    	window.attachEvent("onload", onloadsortinit); 
    	} 
    else 									// DOM
    	{  
    	window.addEventListener("load", onloadsortinit, false); 
    	}
    I didn't write this script and I'm not a JavaScript expert, so i don't know how to edit it properly. I want to change it's function from sorting to filtering, i.e. something along the lines of a slice function. Any advice would be much appreciated.

  • #2
    Regular Coder
    Join Date
    Mar 2006
    Posts
    725
    Thanks
    35
    Thanked 132 Times in 123 Posts
    Hire some help- a large e-commerce site can be made unusable, as well as usable, with script.

  • #3
    Supreme Master coder! Philip M's Avatar
    Join Date
    Jun 2002
    Location
    London, England
    Posts
    17,730
    Thanks
    202
    Thanked 2,508 Times in 2,486 Posts
    Presumably you would not attempt to service or repair a machine or appliance without any experience or understanding of how it worked.

    All the code given in this post has been tested and is intended to address the question asked.
    Unless stated otherwise it is not just a demonstration.

  • #4
    Banned
    Join Date
    Feb 2011
    Posts
    2,699
    Thanks
    13
    Thanked 395 Times in 395 Posts
    I would never do that type of sorting/filtering using javascript.

    It's best to sort the data as you extract it from the database or if that is not possible for some reason you should sort it on the server using a server side scripting/programming language.

    If you use javascript for the sorting, you will need a plan B for javascript disabled browsers while doing it all server side means it will work in 100% of browsers and you eliminate one source of potentially loosing customers.

  • #5
    Supreme Master coder! Philip M's Avatar
    Join Date
    Jun 2002
    Location
    London, England
    Posts
    17,730
    Thanks
    202
    Thanked 2,508 Times in 2,486 Posts
    This is one occasion when I agree 100% with bullant. Anything involving manipulating a database must be done server-side.

    All the code given in this post has been tested and is intended to address the question asked.
    Unless stated otherwise it is not just a demonstration.

  • #6
    Banned
    Join Date
    Feb 2011
    Posts
    2,699
    Thanks
    13
    Thanked 395 Times in 395 Posts
    Quote Originally Posted by Philip M View Post
    This is one occasion when I agree 100% with bullant. Anything involving manipulating a database must be done server-side.
    I'm glad you have finally come round to my and other peoples' way of thinking because in the past when I have suggested users do something server side to avoid a plan B for javascript disabled browsers you reply saying javascript is disabled in only a tiny minority of browsers and that your position is that javascript is a "must have" for web functionality nowadays (or words to that effect).

    There is no reason "technically" why the sorting/filtering couldn't be done client side, provided javascript is enabled, but I'm glad you now "see the light" in doing things server side instead of client side when a function can be done on both

  • #7
    The fat guy next door VIPStephan's Avatar
    Join Date
    Jan 2006
    Location
    Halle (Saale), Germany
    Posts
    8,474
    Thanks
    6
    Thanked 980 Times in 953 Posts
    OK, I agree wholeheartedly with you guys but the reality is that I haven’t come across an e-commerce software that works without JavaScript (at least those few open source systems I’ve checked out so far). This is clearly a mistake of the developers who think about effects and enhancements way too early in the development process but unfortunately it’s reality and at this time apparently not a simple thing to fix in our sense. So, any comments regarding server side vs. client side processing aren’t really helpful here, especially not for coding amateurs (in the most neutral meaning) that look for help on modifying a pre-made system. I guess in this case we have to ignore our principles a little, just live with it for now, and make the best out of it.

  • #8
    Banned
    Join Date
    Feb 2011
    Posts
    2,699
    Thanks
    13
    Thanked 395 Times in 395 Posts
    Quote Originally Posted by VIPStephan View Post
    .....I haven’t come across an e-commerce software that works without JavaScript (at least those few open source systems I’ve checked out so far)...
    from my experience neither have I but that is not to say that a properly functioning e-commerce site without javascript cannot be built.

    If you wanted to, you can build an e-commerce site that handles product display, a shopping cart, data validation and online payments without using javascript at all. It just might not have all the bells and whistles of a site with javascript but it would have all the mandatory functionality of an e-commerce site.

    In this case, the op just wants to filter some database records. This can obviously be done either client or server side. I pointed out I would never perform this function client side, for the reasons given earlier, and to my surprise Philip M has agreed with me even though the filtering can be done both client and server side.
    Last edited by bullant; 06-22-2011 at 12:01 AM.

  • #9
    The fat guy next door VIPStephan's Avatar
    Join Date
    Jan 2006
    Location
    Halle (Saale), Germany
    Posts
    8,474
    Thanks
    6
    Thanked 980 Times in 953 Posts
    Quote Originally Posted by bullant View Post
    from my experience neither have I but that is not to say that a properly functioning e-commerce site without javascript cannot be built.
    Of course such could be built, I never challenged that. I’m just saying, the current reality is that there is none – at least no major platform. Additionally it’s not said that a software that works without JS couldn’t be enhanced with unobtrusive JS as well.

    But rather than philosophize about what is and is not possible/feasible we (the forum community) should help the OP with their imminent problem which means solve the issues with JS for now, despite knowing better.

  • #10
    Banned
    Join Date
    Feb 2011
    Posts
    2,699
    Thanks
    13
    Thanked 395 Times in 395 Posts
    Quote Originally Posted by VIPStephan View Post
    But rather than philosophize about what is and is not possible/feasible we (the forum community) should help the OP with their imminent problem which means solve the issues with JS for now, despite knowing better.
    Imo it is also important to ensure the OP is aware of the potential downside of doing something client side when it can also just as easily, and often easier, be done server side. I can't tell from the op's first post if they are aware the filtering can be done server side.

    It is then up to the OP to choose to continue doing it client side or to change to do it server side.

  • #11
    The fat guy next door VIPStephan's Avatar
    Join Date
    Jan 2006
    Location
    Halle (Saale), Germany
    Posts
    8,474
    Thanks
    6
    Thanked 980 Times in 953 Posts
    OK, I’ve moved all discussion unrelated to this specific issue to another thread on Philosophizing about the use of JavaScript on a website. Please only reply here if you have anything specific to this subject.

  • Users who have thanked VIPStephan for this post:

    AndrewGSW (06-23-2011)


  •  

    Posting Permissions

    • You may not post new threads
    • You may not post replies
    • You may not post attachments
    • You may not edit your posts
    •