]> source.dussan.org Git - jquery.git/commitdiff
Check the attribute node value for false for HTML5 booleans when not supported. Fixes...
authortimmywil <timmywillisn@gmail.com>
Sat, 9 Jul 2011 18:41:58 +0000 (14:41 -0400)
committertimmywil <timmywillisn@gmail.com>
Sat, 9 Jul 2011 18:52:16 +0000 (14:52 -0400)
src/attributes.js
test/unit/attributes.js

index 1e0e79f4b85a427c98f26240fe681e77f55bf4dd..cbd9561eb1d0c7ab97ffd1f5520436f4613ff417 100644 (file)
@@ -496,7 +496,9 @@ jQuery.extend({
 boolHook = {
        get: function( elem, name ) {
                // 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() :
                        undefined;
        },
index 4716e5b532dfa526581b9b5be09b182194ed0356..b0fe2b4aa645b7b7cf4392caf636ec30a306f452 100644 (file)
@@ -162,7 +162,7 @@ test("attr(Hash)", function() {
 });
 
 test("attr(String, Object)", function() {
-       expect(69);
+       expect(73);
 
        var div = jQuery("div").attr("foo", "bar"),
                fail = false;
@@ -230,13 +230,20 @@ test("attr(String, Object)", function() {
        jQuery("#name").attr("maxLength", "10");
        equals( document.getElementById("name").maxLength, 10, "Set maxlength attribute" );
 
-       var $text = jQuery("#text1").attr("autofocus", true);
-       if ( "autofocus" in $text[0] ) {
-               equals( $text.attr("autofocus"), "autofocus", "Set boolean attributes to the same name");
-       } else {
-               equals( $text.attr("autofocus"), undefined, "autofocus stays undefined in browsers that do not support it(F<4)");
-       }
-       equals( $text.attr("autofocus", false).attr("autofocus"), undefined, "Setting autofocus attribute to false removes it");
+       // HTML5 boolean attributes
+       var $text = jQuery("#text1").attr({
+               "autofocus": true,
+               "required": true
+       });
+       equal( $text.attr("autofocus"), "autofocus", "Set boolean attributes to the same name" );
+       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-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");