I want to do some stuff similar to this. The problem I see is the pain of designing DIVs you can't view in a visual layout system - like a VB6 app with a single dialog with hundreds of controls, turned on/off on different states.
- Visitors can check out the Forum FAQ by clicking this link. You have to register before you can post: click the REGISTER link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below. View our Forum Privacy Policy.
- Want to receive the latest contracting news and advice straight to your inbox? Sign up to the ContractorUK newsletter here. Every sign up will also be entered into a draw to WIN £100 Amazon vouchers!
HTML tabs with no round trip to server
Collapse
X
-
Originally posted by MaryPoppinsI'd still not breastfeed a naziOriginally posted by vetranUrine is quite nourishing -
General principles:
- Use semantic HTML;
- Use progressive enhancement.
Very quick'n'dirty example.
Goodness: all content is available when JS is disabled; semantic HTML provides useful navigational assistance including for users of assistive technologies such as screen readers; global JS namespace remains unaltered due to encapsulation of code in anonymous self-invoked function expression; all content is readable by spiders, which is good for SEO.
Badness: old-school event handler attachment; manipulation of styles would be better handled by using classes and additional CSS; CSS and JS ought to be in external files.
Hereby placed in the public domain for your edification and entertainment
EDIT: a few changes to the CSS and JS are posted below...Code:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Tab demo</title> <style type="text/css"> body { font-family: Helvetica, Arial, sans-serif; } .js #tabs { margin: 0; padding: 0; } .js .tab { list-style-type: none; border: 1px solid green; padding: 0.5em 1em; float: left; } .js .tab_content { clear: left; border: 1px solid green; padding: 1em; } </style> </head> <body> <h1>Tab demo</h1> <ol id="tabs"> <li class="tab"><a href="#foo" rel="tab">Foo</a></li> <li class="tab"><a href="#bar" rel="tab">Bar</a></li> <li class="tab"><a href="#baz" rel="tab">Baz</a></li> </ol> <div id="foo" class="tab_content"> <h2>Foo stuff</h2> <p>This is stuff about foo.</p> </div> <div id="bar" class="tab_content"> <h2>Bar stuff</h2> <p>This is stuff about bar.</p> </div> <div id="baz" class="tab_content"> <h2>Baz stuff</h2> <p>This is stuff about baz.</p> </div> <script type="text/javascript"> (function() { var currentContent; function makeOnclickHandler(tab) { return function(e) { if (currentContent) { currentContent.style.display = "none"; } tab.content.style.display = "block"; currentContent = tab.content; return false; } } document.body.className += " js"; var potentialTabs = document.getElementsByTagName("li"); var tabs = []; for (var i = 0, count = potentialTabs.length; i < count; i++) { if (/\btab\b/.test(potentialTabs[i].className)) { tabs[tabs.length] = potentialTabs[i]; } } for (var i = 0, count = tabs.length; i < count; i++) { var tab = tabs[i]; tab = tabs[i] = { element: tab }; var a = tab.element.getElementsByTagName("a")[0]; var href = a.href; var contentId = href.substring(href.lastIndexOf("#") + 1); tab.content = document.getElementById(contentId); tab.content.style.display = "none"; tab.element.onclick = makeOnclickHandler(tab); } tabs[0].element.onclick(); })(); </script> </body> </html>Last edited by NickFitz; 12 January 2010, 20:18.Comment
-
Bad assumptionOriginally posted by suityou01 View PostSeems to work in FF so should be good in IE.
IE has ways of screwing things up that we wot not of. Some bugs are actually worse in IE7 than they were in IE6. You should be all right for something straightforward like this, though.Comment
-
Who said anything about a big problem? I just wanted a steer. Got one. Did the code. All is well. Thanks for your help all.Originally posted by Zippy View PostOK. Show and hide divs is good. You can change styles for the tabs using Jscript (but FF and IE are different)
I'll confess that I don't know what the big problem is here. SorryKnock first as I might be balancing my chakras.Comment
-
Updated version - tidies up a couple of things and highlights the active tab. Only changes are to the CSS:Originally posted by NickFitz View Poststuff...
and the JS:Code:body { font-family: Helvetica, Arial, sans-serif; } .js #tabs { margin: 0; padding: 0; } .js .tab { list-style-type: none; border: 3px solid green; padding: 0.5em 1em; float: left; } .js .active { border-color: #f0f; } .js .active a { color: #f0f; } .js .tab_content { clear: left; border: 1px solid green; padding: 1em; }
Code:(function() { var currentTab = null; function makeOnclickHandler(tab) { return function(e) { if (currentTab) { currentTab.content.style.display = "none"; currentTab.element.className = currentTab.element.className.replace(/\bactive\b/, ""); } tab.content.style.display = "block"; tab.element.className += " active"; currentTab = tab; return false; } } document.body.className += " js"; var potentialTabs = document.getElementsByTagName("li"); var tabs = []; for (var i = 0, count = potentialTabs.length; i < count; i++) { if (/\btab\b/.test(potentialTabs[i].className)) { tabs[tabs.length] = potentialTabs[i]; } } for (var i = 0, count = tabs.length; i < count; i++) { var tab = tabs[i]; tab = tabs[i] = { element: tab }; var a = tab.element.getElementsByTagName("a")[0]; var href = a.href; var contentId = href.substring(href.lastIndexOf("#") + 1); tab.content = document.getElementById(contentId); tab.content.style.display = "none"; tab.element.onclick = makeOnclickHandler(tab); } tabs[0].element.onclick(); })();Comment
- Home
- News & Features
- First Timers
- IR35 / S660 / BN66
- Employee Benefit Trusts
- Agency Workers Regulations
- MSC Legislation
- Limited Companies
- Dividends
- Umbrella Company
- VAT / Flat Rate VAT
- Job News & Guides
- Money News & Guides
- Guide to Contracts
- Successful Contracting
- Contracting Overseas
- Contractor Calculators
- MVL
- Contractor Expenses
Advertisers
Contractor Services
CUK News
- Contractors, a £25million crackdown on rogue company directors is coming Yesterday 05:02
- How to run a contractor limited company — efficiently. Part one: software Jan 22 23:31
- Forget February as an MSC contractor seeking clarity, and maybe forget fairness altogether Jan 22 19:57
- What contractors should take from Honest Payroll Ltd’s failure Jan 21 07:05
- HMRC tax avoidance list ‘proves promoters’ nothing-to-lose mentality’ Jan 20 09:17
- Digital ID won’t be required for Right To Work, but more compulsion looms Jan 19 07:41
- A remote IT contractor's allowable expenses: 10 must-claims in 2026 Jan 16 07:03
- New UK crypto rules now apply. Here’s how mandatory reporting affects contractors Jan 15 07:03
- What the Ray McCann Loan Charge Review means for contractors Jan 14 06:21
- IT contractor demand defied seasonal slump in December 2025 Jan 13 07:10

Comment