2009-02-10 33 views
10

我想動畫的ASP.Net超鏈接的背景做更新面板刷新黃色淡出。到目前爲止,它幾乎在所有的時間都有效,但偶爾會出現一個javascript錯誤:「無效的Propery值。」並調試到jQuery的彩色插件代碼這一行...jQuery的彩色動畫拋出無效的屬性值間歇

fx.elem.style[attr] = "rgb(" + [ 
    Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0]), 255), 0), 
    Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1]), 255), 0), 
    Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2]), 255), 0) 
].join(",") + ")";

這裏是事件,他們目前正在發生的順序...

首先,窗口加載等文檔。就緒其寄存器進行的事件時更新面板已經完成刷新,像這樣......

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(yellowFade); 

凡yellowFade被定義爲...

function yellowFade() { 
    window.setTimeout("$('#' + hyperlinkUrlId).animate({ backgroundColor: 'white' }, 2000)", 2000); 
    window.clearTimeout(); 
} 

現在,很少我已經是正確的崩潰,在這一點上,但通常它就是後來的,所以我會繼續...

我然後點擊標題爲「生成」,創建一個URL加載ASP按鈕與文本的URL .NET超級鏈接它創建,然後通過JavaScript將它的背景顏色爲黃色,從通過該褪色...

$("#" + hyperlinkUrlId).css("background-color", "#FBFF9C");

我最初有它通過設置在代碼中的顏色背後此代碼...

Url.BackColor = ColorTranslator.FromHtml("#FBFF9C");

但後來我想也許後面的顏色被設置爲jquery顏色插件無法識別的東西,或者因爲它被設置爲服務器端插件無法訪問它的風格或其他東西,但改變它仍然有對修復錯誤沒有影響。

最後,生成將URL的背景顏色從白色更改爲黃色,然後正如我所說的,大多數時候它會淡化,但很少會引發錯誤「無效的屬性值」。

據我可以告訴我的語法只是它應該使用顏色動畫的方式。我覺得我正在使用更新面板的事實可能會在這裏造成嚴重破壞,但我不確定。

有沒有人有任何洞察什麼可能會導致這樣的事情?這是一個真正的混亂,試圖進行調試,因爲它很少發生,而忽略了JavaScript已經很難調試的事實。

在Windows Vista上使用jquery 1.3.1和jquery.color 1.0。使用Visual Studio 2008.讓我知道是否有什麼我可以清除。

編輯:當時,還沒有一個單一的迴應。我在這方面遇到了一些問題,但是我在我的應用程序的另一部分發現了這個錯誤,我正在進行黃色淡入淡出。這兩個頁面都使用更新面板。在許多情況下,我不是更新面板的粉絲,而且它絕對會對我的jquery造成嚴重破壞。我想知道這是否與此有關。哦,這是整個Vista的一種暗示,但我會指出我正在使用IIS7。

這是否會引發任何見解?

回答

7

我想我在另一個項目中碰到了和你一樣的問題;我在另一個DIV中有一個DIV(它沒有明確定義它的背景。)我試圖「閃光」內部DIV的背景顏色,並且遇到了該錯誤。只有在我爲容器DIV指定了特定顏色後,錯誤才消失。

+0

男人,我想就是這樣!我暫時還沒有給你答案,但我也遇到了同樣的情況(一個沒有背景色的祖父母公司)。我測試了一堆,並且錯誤尚未返回。 – Carter 2009-02-12 17:25:59

+1

我討厭這樣的事實,那是不可預測的 - 至少在目前看來它已經奏效了。 – Rio 2009-08-27 20:10:12

+1

我應該補充一點,這似乎只能幫助我解決問題,但最終並沒有消除它。 jQuery中存在一個錯誤,請參閱下面的回覆。 – 2010-08-04 15:05:43

7

我在IE8中遇到了同樣的問題,在某些td元素上有背景顏色動畫。即使我爲tr提供了背景顏色,它仍然存在。

我想我現在修好了,通過更改jquery.ui中的一些代碼。

查找本節:

// We override the animation for all of these color styles 
$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i, attr) { 
    $.fx.step[attr] = function(fx) { 
     if (fx.state == 0) { 

變化:

if (fx.state == 0) 

要:

if (fx.state == 0 || fx.start.constructor != Array || fx.end.constructor != Array) 

有時,當執行該代碼。 fx.State不是0,但fx.start和fx.end沒有被初始化爲RGB數組。在更新後的代碼中,我們初始化fx.start和fx.end數組,如果它們尚未初始化。

這似乎已修復它,但很難確定是否存在間歇性問題。

更多細節在這裏:http://dev.jqueryui.com/ticket/4251

2

對於那些具有與該jQuery color plugin這個問題,一個足夠好的劈是改變

if (fx.state == 0) { 

的東西下降,像

if (fx.state <= 0.045) { 

奇怪的是FX .state並不總是0,這就是爲什麼偶爾拋出無效屬性錯誤的原因。

2

jQuery網站上的修正如下(應該在未來版本中)。在effects.core.js,變化:

if (fx.state == 0) { 
    fx.start = getColor(fx.elem, attr); 
    fx.end = getRGB(fx.end); 
} 

到:

if (!fx.colorInit) { 
    fx.start = getColor(fx.elem, attr); 
    fx.end = getRGB(fx.end); 
    fx.colorInit = true; 
} 

這完全清除的問題,爲我。

0

如果您嘗試在某些瀏覽器(適用於Firefox,不適用於Google Chrome)中嘗試設置某些元素的動畫效果,則這似乎不起作用。例如,這不適用於HTML畫布。 fx.start將是未定義的。

我的「黑客」來獲得它與HTML畫布元素的工作 - 例如

if (fx.start == undefined) { fx.start = getRGB('white'); } 
1

我已經重寫的顏色設置器功能,防止NaNs傳送到RGB值,這解決了問題。

var r = Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0]), 255), 0); 
var g = Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1]), 255), 0); 
var b = Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2]), 255), 0); 
if (!isNaN(r) && !isNaN(g) && !isNaN(b)) 
{ 
    var rgb = "rgb(" + [r,g,b].join(",") + ")"; 
    fx.elem.style[attr] = rgb; 
} 
1

我有另一種解決方案,它適用於我。只需添加這些驗證行:

if (fx.start == undefined) { fx.start = getRGB('white'); } 
if (fx.end == undefined) { fx.end = getRGB('white'); } 

在此之前:

fx.elem.style[attr] = "rgb(" + [ 
Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0]), 255), 0), 
Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1]), 255), 0), 
Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2]), 255), 0)].join(",") + ")"; 
1

我是有jquery.color.js類似的問題。通過使用jquery.effects.core.js(jQuery UI效果核心)解決了這個問題。

我希望它也適用於你。