Bug 1427542 - Fix reset a form can't clear -moz-ui-invalid after calling reportValidity. r=smaug

This commit is contained in:
John Dai 2018-01-09 16:37:02 +08:00
parent 1d11facceb
commit 408eb5bda0
2 changed files with 39 additions and 0 deletions

View File

@ -579,6 +579,7 @@ HTMLFormElement::DoSubmitOrReset(WidgetEvent* aEvent,
nsresult
HTMLFormElement::DoReset()
{
mEverTriedInvalidSubmit = false;
// JBK walk the elements[] array instead of form frame controls - bug 34297
uint32_t numElements = GetElementCount();
for (uint32_t elementX = 0; elementX < numElements; ++elementX) {

View File

@ -119,6 +119,13 @@ function checkTextareaRequiredValidity()
element.form.reset();
checkSufferingFromBeingMissing(element, false);
SpecialPowers.wrap(element).value = '';
element.form.reportValidity();
checkSufferingFromBeingMissing(element, true);
element.form.reset();
checkSufferingFromBeingMissing(element, false);
// TODO: for the moment, a textarea outside of a document is mutable.
SpecialPowers.wrap(element).value = ''; // To make -moz-ui-valid apply.
element.required = false;
@ -191,6 +198,13 @@ function checkInputRequiredValidity(type)
element.form.reset();
checkSufferingFromBeingMissing(element, false);
SpecialPowers.wrap(element).value = '';
element.form.reportValidity();
checkSufferingFromBeingMissing(element, true);
element.form.reset();
checkSufferingFromBeingMissing(element, false);
element.required = true;
SpecialPowers.wrap(element).value = ''; // To make :-moz-ui-valid apply.
checkSufferingFromBeingMissing(element, true);
@ -228,6 +242,14 @@ function checkInputRequiredValidityForCheckbox()
element.form.reset();
checkSufferingFromBeingMissing(element, false);
element.required = true;
element.checked = false;
element.form.reportValidity();
checkSufferingFromBeingMissing(element, true);
element.form.reset();
checkSufferingFromBeingMissing(element, false);
element.required = true;
element.checked = false;
document.forms[0].removeChild(element);
@ -304,6 +326,14 @@ function checkInputRequiredValidityForRadio()
element2.form.reset();
checkSufferingFromBeingMissing(element2, false);
element2.required = true;
element2.checked = false;
element2.form.reportValidity();
checkSufferingFromBeingMissing(element2, true);
element2.form.reset();
checkSufferingFromBeingMissing(element2, false);
element2.required = true;
element2.checked = false;
document.forms[0].removeChild(element2);
@ -341,6 +371,14 @@ function checkInputRequiredValidityForFile()
element.form.reset();
checkSufferingFromBeingMissing(element, false);
element.required = true;
SpecialPowers.wrap(element).value = '';
element.form.reportValidity();
checkSufferingFromBeingMissing(element, true);
element.form.reset();
checkSufferingFromBeingMissing(element, false);
element.required = true;
SpecialPowers.wrap(element).value = '';
document.forms[0].removeChild(element);