JQuery цвет анимации бросает Неверное значение свойства с перерывами

Я пытаюсь оживить фон для гиперссылки ASP.Net, чтобы сделать желтое затухание обновлением панелей обновлений. Пока это работает почти все время, но изредка возникает ошибка javascript "Недопустимое значение правильности". и он отлаживается в код подключаемого кода 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(",") + ")";

Вот порядок событий, как они сейчас происходят...

Во-первых, окно загружается так на doc.ready, он регистрирует событие, которое должно выполняться, когда панель обновления закончила обновление таким образом...

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

Где 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 color не смог распознать, или поскольку он был настроен на стороне сервера, плагин не смог получить доступ к этому стилю или чем-то, но изменил его все еще не влияло на исправление ошибки.

Наконец, сгенерируйте цвет обратного URL от белого до желтого, как я сказал, большую часть времени он исчезает просто отлично, но редко он выдает ошибку "Недопустимое значение свойства".

Насколько я могу сказать, мой синтаксис - это просто способ использования цветовой анимации. Я чувствую, что тот факт, что я использую updatepanel, может быть разрушен здесь, но я не уверен.

Есть ли у кого-нибудь представление о том, что может вызвать такую ​​вещь? Это был настоящий беспорядок, который пытался отлаживать, так как это случается так редко, игнорируя тот факт, что javascript уже больно отлаживать.

Использование jquery 1.3.1 и jquery.color 1.0 в Windows Vista. Использование Visual Studio 2008. Сообщите мне, есть ли что-нибудь, что я могу прояснить.

EDIT: Данг, пока еще нет ответа. Я немного потрудился работать над этим, но я нашел ошибку в другой части моего приложения, где я делаю желтое увядание. Обе эти страницы используют панель обновления. Во многих случаях я не являюсь поклонником панели обновления, и это определенно навлекло хаос на мой jquery. Мне интересно, если это имеет какое-то отношение к этому. О, это было похоже на всю вещь Vista, но я укажу, что я работаю на IIS7.

Означает ли это какие-либо идеи?

Ответ 1

Я думаю, что столкнулся с той же проблемой, что и вы в другом проекте; У меня был DIV внутри другого DIV (у которого не было явно заданного фона). Я пытался "зажечь" цвет фона внутреннего DIV и столкнулся с этой ошибкой. Только после того, как я назначил определенный цвет контейнеру DIV, ошибка исчезла.

Ответ 2

У меня была такая же проблема в 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)

To:

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

Ответ 3

Для тех, у кого есть эта проблема с jQuery color plugin, достаточно хорошо взломать, чтобы изменить

if ( fx.state == 0 ) {

для чего-то низкого, как

if ( fx.state <= 0.045 ) {

Как ни странно, fx.state не всегда равно 0, поэтому иногда возникает ошибка недопустимого значения.

Ответ 4

Исправление на сайте 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;
}

Это полностью очистило проблему для меня.

Ответ 5

Я переписал функцию настройки цвета, чтобы предотвратить распространение 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;
}

Ответ 6

У меня есть другое решение, оно работает для меня. Просто добавьте эти строки проверки:

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

Ответ 7

У меня была аналогичная проблема с jquery.color.js. Решено это с помощью jquery.effects.core.js (ядра jquery ui).

Я надеюсь, что это сработает и для вас.

Ответ 8

Это не работает, если вы пытаетесь анимировать некоторые элементы в определенных браузерах (работает в Firefox, а не в Google Chrome). Например, это не будет работать с HTML Canvas. fx.start будет undefined.

Мой "взломать", чтобы заставить его работать с элементами HTML Canvas, например -

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