Attributes: Only convert true, false & an empty string #5451
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
The HTML spec defines boolean attributes:
https://html.spec.whatwg.org/#boolean-attributes
that often correlate with boolean properties. If the attribute is missing, it correlates with the
false
property value, if it's present - thetrue
property value. The only valid values are an empty string or the attribute name.jQuery tried to be helpful here and treated boolean attributes in a special way in the
.attr()
API:false
was passed; otherwise, it was ignoring the passed value and set the attribute - interestingly, in jQuery>=3
not lowercased anymore.The problem is the spec occasionally converts boolean attributes into ones with additional attribute values with special behavior - one such example is the new
"until-found"
value for thehidden
attribute. Our setter normalization means passing those values is impossible with jQuery.This patch takes a conservative approach, with backwards compatibility in mind, and makes the following changes:
false
as mean attribute removal andtrue
as setting the value to the attribute name. All the other inputs are aplied unchanged.With this change, all existing jQuery unit tests were already passing.
Checklist