From: Yehuda Katz Date: Sun, 12 Jul 2009 18:31:26 +0000 (+0000) Subject: Added test for css(String, Function) and css(Object) where values are Functions;... X-Git-Url: http://git.asbjorn.it/?a=commitdiff_plain;h=e8eff25f3b6d9a0c03f6581089406cebcc86aa34;p=jquery.git Added test for css(String, Function) and css(Object) where values are Functions; fixed css(Object) --- diff --git a/src/css.js b/src/css.js index 973462b..94a021b 100644 --- a/src/css.js +++ b/src/css.js @@ -21,6 +21,13 @@ jQuery.fn.css = function( name, value ) { options[ name ] = value; } } + + var isFunction = {}; + + // For each value, determine whether it's a Function so we don't + // need to determine it again for each element + for ( var prop in options ) + isFunction[prop] = jQuery.isFunction( options[prop] ); // For each element... for ( var i = 0, l = this.length; i < l; i++ ) { @@ -30,9 +37,7 @@ jQuery.fn.css = function( name, value ) { for ( var prop in options ) { value = options[prop]; - if ( isFunction ) { - value = value.call( elem, i ); - } + if ( isFunction[prop] ) value = value.call( elem, i ); if ( typeof value === "number" && !exclude.test(prop) ) { value = value + "px"; diff --git a/test/unit/css.js b/test/unit/css.js index a917173..9f84d86 100644 --- a/test/unit/css.js +++ b/test/unit/css.js @@ -81,6 +81,68 @@ test("css(String, Object)", function() { equals( jQuery("#t2037 .hidden").css("display"), "none", "Make sure browser thinks it is hidden" ); }); +test("css(String, Function)", function() { + try { + expect(3); + + var colors = ["red", "green", "blue"]; + + jQuery("
" + + "
" + + "
") + .appendTo("body"); + + var index = 0; + + jQuery("#cssFunctionTest div").css("color", function() { + var color = colors[index]; + index++; + return color; + }); + + index = 0; + + jQuery("#cssFunctionTest div").each(function() { + equals( jQuery(this).css("color"), colors[index], "Div #" + index + " should be " + colors[index] ); + index++; + }); + + } finally { + jQuery("#cssFunctionTest").remove(); + } +}); + +test("css(Object) where values are Functions", function() { + try { + expect(3); + + var colors = ["red", "green", "blue"]; + + jQuery("
" + + "
" + + "
") + .appendTo("body"); + + var index = 0; + + jQuery("#cssFunctionTest div").css({color: function() { + var color = colors[index]; + index++; + return color; + }}); + + index = 0; + + jQuery("#cssFunctionTest div").each(function() { + equals( jQuery(this).css("color"), colors[index], "Div #" + index + " should be " + colors[index] ); + index++; + }); + + } finally { + jQuery("#cssFunctionTest").remove(); + } +}); + test("jQuery.css(elem, 'height') doesn't clear radio buttons (bug #1095)", function () { expect(4);