- From: Matt May <mcmay@bestkungfu.com>
- Date: Tue, 16 Aug 2005 23:33:16 -0700
- To: Becky_Gibson@notesdev.ibm.com
- CC: w3c-wai-gl@w3.org
Becky_Gibson@notesdev.ibm.com wrote:
>
> Common accessibility practice has said that JavaScript URIs should not
> be used. For example, <a href="javascript:doSomething();" >Action
> Link</a>, will do nothing if JavaScript is not available. Now that
> WCAG 2.0 is providing for baselines that assume JavaScript is
> available and enabled, a discussion of JavaScript URIs and invoking
> JavaScript from an anchor link becomes relevant. While the DHTML
> Roadmap technologies remove the need to use anchor tags for keyboard
> support in IE 5.5+ and Firefox 1.5, older browsers still require this.
> In in order to build complex, keyboard accessible JavaScript widgets,
> developers are going to rely on anchor tags to call a JavaScript method.
However, they do _not_ need to use the javascript: namespace.
> I'd like to start a thread to discuss the pros and cons of JavaScript
> URIs and calling JavaScript functions from an anchor tag.
>
> Assume doSomething() is a JavaScript function that may or may not take
> any parameters. Below are some techniques for creating links to
> invoke a JavaScript function. In these examples, assume loading
> another page is not an option.
>
> <a href="javascript:doSomething();">Action Link</a>
> <a href="javascript:;" onclick="doSomthing();">Action Link</a>
> <a href="javascript:doSomething();" onclick="doSomthing();return
> false;">Action Link</a>
> <a href="#" onclick="doSomething();return false;">Action Link</a>
> <a href="/" onclick="doSomthing();return false;"><Action Link</a>
>
> Are there other methods? Is one recommended over others? What are the
> pros and cons? What about the effect on the browser history? While a
> javascript: URI is not defined in any official specification, I've
> attached a simple test file using these methods that passes validation
> as XHTML 1.0 transitional.
It only passes because it doesn't matter to the validator what's inside
that href. It's still a fake URI, and there's no situation I can think
of where it actually needs to exist. Having the onclick event is
sufficient, and provides the opportunity for graceful degradation.
The method I prefer is unobtrusive JavaScript:
<a id="foo" href="serversidecode">Action Link</a>
where "serversidecode" executes the same functionality as the script.
Then, within a <script> block (or in a linked .js file):
function do_my_bidding(obj) { ... }
document.getElementById("foo").onclick = do_my_bidding;
This allows a fully functional scriptless site to be enhanced with as
much JavaScript as an author would like, or at the bare minimum would
let authors send users to a failure page to tell them that their lack of
script means they can't use the site. The rest of these possibilities
either:
- do nothing, confusing users who will try to click the anchor again and
again awaiting a response;
- send users to the homepage or some other URI unexpectedly (<a
href="/">); or
- throw errors that mean nothing to users when script is off or
unavailable (can't find site "javascript:return%20false").
-
m
Received on Wednesday, 17 August 2005 06:33:29 UTC