]> source.dussan.org Git - jquery.git/commitdiff
Fix #12685. Handle inconsistent opacity for ie < 9. Close gh-1005.
authoryiminghe <yiminghe@gmail.com>
Mon, 22 Oct 2012 03:40:37 +0000 (11:40 +0800)
committerDave Methvin <dave.methvin@gmail.com>
Tue, 30 Oct 2012 14:20:54 +0000 (10:20 -0400)
AUTHORS.txt
src/css.js
test/unit/css.js

index 0a06fece5b8f379c67b42a418308e5e95ef95591..dea7ef9956bcaa4a46c0f4ad60719b5205ad6b54 100644 (file)
@@ -153,3 +153,4 @@ Jay Merrifield <fracmak@gmail.com>
 Allen J Schmidt Jr <cobrasoft@gmail.com>
 Marcel Greter <marcel.greter@ocbnet.ch>
 Matthias Jäggli <matthias.jaeggli@gmail.com>
+Yiming He <yiminghe@gmail.com>
index 6dd13efdf2c86ab010283fa7c0d23b58a891550b..1723223e53415edda79b7e6245eda551789fea02 100644 (file)
@@ -1,6 +1,6 @@
 var curCSS, iframe, iframeDoc,
        ralpha = /alpha\([^)]*\)/i,
-       ropacity = /opacity=([^)]*)/,
+       ropacity = /opacity\s*=\s*([^)]*)/,
        rposition = /^(top|right|bottom|left)$/,
        // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
        // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
@@ -535,7 +535,9 @@ if ( !jQuery.support.opacity ) {
                        style.zoom = 1;
 
                        // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
-                       if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
+                       // if value === "", then remove inline opacity #12685
+                       if ( ( value >= 1 || value === "" ) &&
+                jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
                                style.removeAttribute ) {
 
                                // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
@@ -543,8 +545,8 @@ if ( !jQuery.support.opacity ) {
                                // style.removeAttribute is IE Only, but so apparently is this code path...
                                style.removeAttribute( "filter" );
 
-                               // if there there is no filter style applied in a css rule, we are done
-                               if ( currentStyle && !currentStyle.filter ) {
+                               // if there is no filter style applied in a css rule or unset inline opacity, we are done
+                               if ( value === "" || currentStyle && !currentStyle.filter ) {
                                        return;
                                }
                        }
index ec1af1dd5591476a30a1ea151fb7a2147c0b421b..3dc9653ba5a34b59a512bd5e6c4e1643d2a2c52e 100644 (file)
@@ -868,4 +868,20 @@ test( "cssHooks - expand", function() {
 
 });
 
+test( "css opacity consistency across browsers (#12685)", function() {
+       expect( 4 );
+
+    var fixture = jQuery("#qunit-fixture"),
+        style = jQuery("<style>.opacityWithSpaces_t12685 { opacity: 0.1; filter: alpha(opacity = 10); } .opacityNoSpaces_t12685 { opacity: 0.2; filter: alpha(opacity=20); }</style>").appendTo(fixture),
+        el = jQuery("<div class='opacityWithSpaces_t12685'></div>").appendTo(fixture);
+        
+    equal( Math.round( el.css("opacity") * 100 ), 10, "opacity from style sheet (filter:alpha with spaces)" );
+    el.removeClass("opacityWithSpaces_t12685").addClass("opacityNoSpaces_t12685");
+    equal( Math.round( el.css("opacity") * 100 ), 20, "opacity from style sheet (filter:alpha without spaces)" );
+    el.css( "opacity", 0.3 );
+    equal( Math.round( el.css("opacity") * 100 ), 30, "override opacity" );
+    el.css( "opacity", "" );
+    equal( Math.round( el.css("opacity") * 100 ), 20, "remove opacity override" );
+});
+
 }