Commit 1886d744 authored by timmywil's avatar timmywil

Check the attribute node value for false for HTML5 booleans when not supported. Fixes #9504.

parent e6f89519
...@@ -496,7 +496,9 @@ jQuery.extend({ ...@@ -496,7 +496,9 @@ jQuery.extend({
boolHook = { boolHook = {
get: function( elem, name ) { get: function( elem, name ) {
// Align boolean attributes with corresponding properties // Align boolean attributes with corresponding properties
return jQuery.prop( elem, name ) ? // Fall back to attribute presence where some booleans are not supported
var attrNode;
return jQuery.prop( elem, name ) === true || ( attrNode = elem.getAttributeNode( name ) ) && attrNode.nodeValue !== false ?
name.toLowerCase() : name.toLowerCase() :
undefined; undefined;
}, },
......
...@@ -162,7 +162,7 @@ test("attr(Hash)", function() { ...@@ -162,7 +162,7 @@ test("attr(Hash)", function() {
}); });
test("attr(String, Object)", function() { test("attr(String, Object)", function() {
expect(69); expect(73);
var div = jQuery("div").attr("foo", "bar"), var div = jQuery("div").attr("foo", "bar"),
fail = false; fail = false;
...@@ -230,13 +230,20 @@ test("attr(String, Object)", function() { ...@@ -230,13 +230,20 @@ test("attr(String, Object)", function() {
jQuery("#name").attr("maxLength", "10"); jQuery("#name").attr("maxLength", "10");
equals( document.getElementById("name").maxLength, 10, "Set maxlength attribute" ); equals( document.getElementById("name").maxLength, 10, "Set maxlength attribute" );
var $text = jQuery("#text1").attr("autofocus", true); // HTML5 boolean attributes
if ( "autofocus" in $text[0] ) { var $text = jQuery("#text1").attr({
equals( $text.attr("autofocus"), "autofocus", "Set boolean attributes to the same name"); "autofocus": true,
} else { "required": true
equals( $text.attr("autofocus"), undefined, "autofocus stays undefined in browsers that do not support it(F<4)"); });
} equal( $text.attr("autofocus"), "autofocus", "Set boolean attributes to the same name" );
equals( $text.attr("autofocus", false).attr("autofocus"), undefined, "Setting autofocus attribute to false removes it"); equal( $text.attr("autofocus", false).attr("autofocus"), undefined, "Setting autofocus attribute to false removes it" );
equal( $text.attr("required"), "required", "Set boolean attributes to the same name" );
equal( $text.attr("required", false).attr("required"), undefined, "Setting required attribute to false removes it" );
var $details = jQuery("<details open></details>").appendTo("#qunit-fixture");
equal( $details.attr("open"), "open", "open attribute presense indicates true" );
equal( $details.attr("open", false).attr("open"), undefined, "Setting open attribute to false removes it" );
equals( $text.attr("data-something", true).data("something"), true, "Setting data attributes are not affected by boolean settings"); equals( $text.attr("data-something", true).data("something"), true, "Setting data attributes are not affected by boolean settings");
equals( $text.attr("data-another", false).data("another"), false, "Setting data attributes are not affected by boolean settings" ); equals( $text.attr("data-another", false).data("another"), false, "Setting data attributes are not affected by boolean settings" );
equals( $text.attr("aria-disabled", false).attr("aria-disabled"), "false", "Setting aria attributes are not affected by boolean settings"); equals( $text.attr("aria-disabled", false).attr("aria-disabled"), "false", "Setting aria attributes are not affected by boolean settings");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment