Asp.net jquery彩色动画间歇性抛出无效的属性值

Asp.net jquery彩色动画间歇性抛出无效的属性值,asp.net,jquery,updatepanel,colors,jquery-animate,Asp.net,Jquery,Updatepanel,Colors,Jquery Animate,我正在尝试为ASP.Net超链接设置背景动画,以便在更新面板刷新时进行黄色淡入淡出。到目前为止,它几乎一直在工作,但偶尔会抛出一个javascript错误“Invalid Propery value”。它会调试到jquery颜色插件代码中,直到这一行 fx.elem.style[attr] = "rgb(" + [ Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0]), 255),

我正在尝试为ASP.Net超链接设置背景动画,以便在更新面板刷新时进行黄色淡入淡出。到目前为止,它几乎一直在工作,但偶尔会抛出一个javascript错误“Invalid Propery value”。它会调试到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(",") + ")";
以下是当前发生的事件的顺序

首先,窗口加载so on doc.ready,它注册了一个事件,在更新面板完成刷新后执行,如

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(yellowFade);
黄色褪色的定义是

function yellowFade() {
    window.setTimeout("$('#' + hyperlinkUrlId).animate( { backgroundColor: 'white' }, 2000)", 2000);
    window.clearTimeout();
}
现在,我很少让它在这一点上崩溃,但通常是稍后,所以我将继续

然后,我点击一个名为“生成”的按钮,创建一个URL,加载ASP.Net超链接,其中包含它创建的URL的文本,然后通过javascript将其背景色设置为黄色,以便通过此

$("#" + hyperlinkUrlId).css("background-color", "#FBFF9C");
我最初让它通过这个代码在代码后面设置颜色

Url.BackColor = ColorTranslator.FromHtml("#FBFF9C");
但后来我想,可能是因为背景颜色被设置为jquery颜色插件无法识别的东西,或者因为它被设置为服务器端,插件无法访问它的样式或其他东西,但更改它仍然对修复错误没有任何影响

最后,generate将URL的背景颜色从白色更改为黄色,然后正如我所说的,大多数时候它会很好地淡出,但很少抛出错误“属性值无效”

据我所知,我的语法正是使用彩色动画的方式。我觉得我正在使用updatepanel这一事实可能会给这里带来巨大的破坏,但我不确定

有人知道是什么导致了这样的事情吗?尝试调试时真是一团糟,因为它很少发生,而忽略了javascript已经是调试的一大难题这一事实

在Windows Vista上使用jquery 1.3.1和jquery.color 1.0。使用VisualStudio2008。如果有什么我可以澄清的,请告诉我

编辑:当,还没有一个回应。我已经暂停了一段时间,但我刚刚在我的应用程序的另一部分中发现了这个bug,我正在做黄色渐变。这两个页面都使用更新面板。在很多情况下,我都不喜欢更新面板,它肯定对我的jquery造成了严重破坏。我想知道这是否与此有关。哦,这在整个Vista中有点含蓄,但我要指出,我是在IIS7上运行的


这是否引发了任何见解

我想我在另一个项目上遇到了和你一样的问题;我在另一个DIV中有一个DIV(没有明确定义它的背景)。我试图“闪烁”内部DIV的背景色,但遇到了这个错误。只有在我为container DIV指定了特定的颜色之后,错误才消失。

在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)
致:

有时在执行此代码时。State不是0,但fx.start和fx.end尚未初始化为RGB数组。在更新的代码中,如果fx.start和fx.end数组尚未初始化,我们将对它们进行初始化

这似乎解决了问题,但很难确定是否存在间歇性问题


这里有更多的细节:

对于那个些有这个问题的人来说,一个足够好的破解方法就是改变

if ( fx.state == 0 ) {
低到像

if ( fx.state <= 0.045 ) {

if(fx.statejQuery站点上的修复程序如下(应该在未来的版本中)。在effects.core.js中,更改:

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


这完全解决了我的问题。

如果您试图在某些浏览器中设置某些元素的动画(在Firefox中有效,而不是在Google Chrome中)。例如,这在HTML画布上不起作用。fx.start将是未定义的

例如,我的“hack”可以让它与HTML画布元素一起工作-

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

我已经重写了颜色设置函数,以防止NAN传播到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;
}

我有另一个解决方案,它适合我。只需添加以下验证行:

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(",") + ")";

我在
jquery.color.js
中遇到了类似的问题。通过使用
jquery.effects.core.js
(jquery-ui-effects-core)解决了这个问题


我希望它对你也有用。

伙计,我想就是这样!我暂时不给你答案,但我也遇到了同样的情况(一个没有背景颜色的祖父母部门)。我已经测试了一系列错误,但到目前为止还没有返回。我讨厌这是一个如此不可预测的事实-它似乎起了作用,至少目前是这样。我应该添加这一点,它似乎只是帮助了我的问题,但最终并没有消除它。jQuery中有一个bug,请参阅下面的响应。设置父背景颜色对我来说不起作用或者是我。但是这个解决方案做到了。+1,完美的解释+指向Trac票证的链接,我可以自信地解决我的问题,而不是巫毒:)顺便说一句-您可以使用他们的最终解决方案而不是此代码:-1:错误是由比赛条件引起的,其中fx.state可以在初始化运行之前大于0。接受较大的值会减少竞争条件的窗口,但会导致不必要的重新计算,并且竞争条件仍然存在(如果由于某种原因延迟变得更长)。请参阅兰斯·费舍尔的答案和评论
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(",") + ")";