function checkPseudoClasses(aElement, aValid, aValidUI, aInvalidUI)
{
if (aValid) {
ok(aElement.matches(":valid"), ":valid should apply");
} else {
ok(aElement.matches(":invalid"), ":invalid should apply");
}
is(aElement.matches(":user-valid"), aValidUI,
aValid ? ":user-valid should apply" : ":user-valid should not apply");
is(aElement.matches(":user-invalid"), aInvalidUI,
aInvalidUI ? ":user-invalid should apply" : ":user-invalid should not apply");
if (aInvalidUI && (aValid || aValidUI)) {
ok(false, ":invalid can't apply with :valid or :user-valid");
}
}
/**
* r1 and r2 should be in the same group.
* r3 should be in another group.
* form can be null.
*/
function checkRadios(r1, r2, r3, form)
{
// Default state.
checkPseudoClasses(r1, true, false, false);
checkPseudoClasses(r2, true, false, false);
checkPseudoClasses(r3, true, false, false);
// Do not suffer from being missing (with ui-valid).
r1.click();
checkPseudoClasses(r1, true, true, false);
checkPseudoClasses(r2, true, false, false);
checkPseudoClasses(r3, true, false, false);
// Do not suffer from being missing (with ui-valid).
r1.checked = false;
r1.required = false;
checkPseudoClasses(r1, true, true, false);
checkPseudoClasses(r2, true, false, false);
checkPseudoClasses(r3, true, false, false);
// Suffering from being missing (with ui-invalid) with required set on one radio
// and the checked state changed on another.
r1.required = true;
r2.checked = false;
checkPseudoClasses(r1, false, false, true);
checkPseudoClasses(r2, false, false, false);
checkPseudoClasses(r3, true, false, false);
// Do not suffer from being missing (with ui-valid) by checking the radio which
// hasn't the required attribute.
r2.checked = true;
checkPseudoClasses(r1, true, true, false);
checkPseudoClasses(r2, true, false, false);
checkPseudoClasses(r3, true, false, false);
// Removing the radio with the required attribute should make the group valid.
r1.setCustomValidity('');
r2.setCustomValidity('');
r1.required = false;
r2.required = true;
r1.checked = r2.checked = false;
checkPseudoClasses(r1, false, false, true);
checkPseudoClasses(r2, false, false, false);
var p = r2.parentNode;
p.removeChild(r2);
checkPseudoClasses(r1, true, true, false);
checkPseudoClasses(r2, false, false, false);
// Adding a radio element to an invalid group should make it invalid.
p.removeChild(r1);
checkPseudoClasses(r1, true, true, false);
checkPseudoClasses(r2, false, false, false);
// Adding a checked radio element to an invalid group should make it valid.
p.removeChild(r1);
checkPseudoClasses(r1, true, true, false);
checkPseudoClasses(r2, false, false, false);
// Adding an invalid radio element by changing the name attribute.
r2.name = 'c';
checkPseudoClasses(r1, true, true, false);
checkPseudoClasses(r2, false, false, false);
// Adding an element to an invalid radio group by changing the name attribute.
r1.name = 'c';
checkPseudoClasses(r1, true, true, false);
checkPseudoClasses(r2, false, false, false);
// Adding a checked element to an invalid radio group with the name attribute.
r1.name = 'c';
checkPseudoClasses(r1, true, true, false);
checkPseudoClasses(r2, false, false, false);
var r1 = document.getElementsByTagName('input')[0]; var r2 = document.getElementsByTagName('input')[1]; var r3 = document.getElementsByTagName('input')[2];
checkRadios(r1, r2, r3);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.