148 lines
4.6 KiB
HTML
148 lines
4.6 KiB
HTML
<html>
|
|
<head>
|
|
<title>ARIA Checkbox</title>
|
|
|
|
<script type="text/javascript" >
|
|
/*
|
|
* @method public getTarget() - helper function to extract the element which fired the event from the event object.
|
|
* @param event - event object
|
|
* @return - the appropriate target based on the varibles supported in the event object.
|
|
*/
|
|
function getTarget(event) {
|
|
var target = null;
|
|
if (event.target) {
|
|
target = event.target;
|
|
}
|
|
else if (event.srcElement) {
|
|
target = event.srcElement;
|
|
}
|
|
return target;
|
|
}
|
|
/******************* End of wrapper functions **********************/
|
|
var CHECK = "checked.gif";
|
|
var UNCHECK = "unchecked.gif";
|
|
var MIXED = "mixed.gif";
|
|
var ELEMENT_NODE = 1; // IE does not understand Node.ELEMENT_NODE nor nodeObj.ELEMENT_NODE
|
|
// Mouse and keyboard event handlers for controls
|
|
function checkBoxEvent(event)
|
|
{
|
|
var bEventContinue = true; // Browser can still use event
|
|
try {
|
|
if ((event.type == "click" && event.button == 0) ||
|
|
(event.type == "keydown" && event.keyCode == 32)) {
|
|
// Toggle checkbox
|
|
var checkbox = getTarget(event);
|
|
var checkImg = null;
|
|
// event could be coming from img
|
|
if (checkbox.nodeType == ELEMENT_NODE && checkbox.tagName.toUpperCase() == "IMG") {
|
|
checkImg = checkbox;
|
|
checkbox = checkbox.parentNode;
|
|
}
|
|
else { //event coming from span
|
|
for (var i=0; i < checkbox.childNodes.length; i++) {
|
|
checkImg = checkbox.childNodes[i];
|
|
if (checkImg.nodeType == ELEMENT_NODE && checkImg.tagName.toUpperCase() == "IMG") {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (checkbox.getAttribute("aria-checked") == "true") {
|
|
checkbox.removeAttribute("aria-checked");
|
|
checkImg.src = UNCHECK;
|
|
}
|
|
else {
|
|
checkbox.setAttribute("aria-checked", "true");
|
|
checkImg.src = CHECK;
|
|
}
|
|
bEventContinue = false; // Do not continue propagating event
|
|
}
|
|
} catch (error) {
|
|
bEventContinue = true;
|
|
}
|
|
return bEventContinue;
|
|
}
|
|
|
|
function tristateCheckBoxEvent(event)
|
|
{
|
|
var bEventContinue = true; // Browser can still use event
|
|
try {
|
|
if ((event.type == "click" && event.button == 0) ||
|
|
(event.type == "keydown" && event.keyCode == 32)) {
|
|
// Toggle checkbox
|
|
var checkbox = getTarget(event);
|
|
var checkImg = null;
|
|
// event could be coming from img
|
|
if (checkbox.nodeType == ELEMENT_NODE && checkbox.tagName.toUpperCase() == "IMG") {
|
|
checkImg = checkbox;
|
|
checkbox = checkbox.parentNode;
|
|
}
|
|
else { //event coming from span
|
|
for (var i=0; i < checkbox.childNodes.length; i++) {
|
|
checkImg = checkbox.childNodes[i];
|
|
if (checkImg.nodeType == ELEMENT_NODE && checkImg.tagName.toUpperCase() == "IMG") {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (checkbox.getAttribute("aria-checked") == "true") {
|
|
checkbox.removeAttribute("aria-checked");
|
|
checkImg.src = UNCHECK;
|
|
}
|
|
else if (checkbox.getAttribute("aria-checked") == "mixed") {
|
|
checkbox.setAttribute("aria-checked", "true");
|
|
checkImg.src = CHECK;
|
|
}
|
|
else {
|
|
checkbox.setAttribute("aria-checked", "mixed");
|
|
checkImg.src = MIXED;
|
|
}
|
|
bEventContinue = false; // Do not continue propagating event
|
|
}
|
|
} catch (error) {
|
|
bEventContinue = true;
|
|
}
|
|
return bEventContinue;
|
|
};
|
|
//]]>
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<p>Here's a checkbox that you can click on.</p>
|
|
|
|
<div>
|
|
<span role="checkbox" aria-checked="true" tabindex="0"
|
|
onkeydown="return checkBoxEvent(event);" onclick="return checkBoxEvent(event);" >
|
|
<img src="checked.gif" role="presentation" alt="" />
|
|
Include decorative fruit basket
|
|
</span>
|
|
</div>
|
|
|
|
<div>
|
|
<span role="checkbox" aria-checked="true" aria-invalid="true" tabindex="0"
|
|
onkeydown="return checkBoxEvent(event);" onclick="return checkBoxEvent(event);" >
|
|
<img src="checked.gif" role="presentation" alt="" />
|
|
Invalid checkbox
|
|
</span>
|
|
</div>
|
|
|
|
<div>
|
|
<span role="checkbox" aria-checked="true" aria-required="true" tabindex="0"
|
|
onkeydown="return checkBoxEvent(event);" onclick="return checkBoxEvent(event);" >
|
|
<img src="checked.gif" role="presentation" alt="" />
|
|
Required checkbox
|
|
</span>
|
|
</div>
|
|
|
|
<div>
|
|
<span role="checkbox" aria-checked="true" aria-required="true" tabindex="0"
|
|
onkeydown="return tristateCheckBoxEvent(event);" onclick="return tristateCheckBoxEvent(event);" >
|
|
<img src="checked.gif" role="presentation" alt="" />
|
|
Tri-state checkbox
|
|
</span>
|
|
</div>
|
|
<p>
|
|
<a href="/web/20110104115538/http://www.google.com/">Random Google link</a>
|
|
</p>
|
|
</body>
|
|
</html>
|