Отключение события элемента Рафаэля - PullRequest
0 голосов
/ 18 октября 2010

Я присоединяю событие onmouseout к элементу круга Рафаэля следующим образом:

    (function(el,iElPos,col){
        el.mouseout(function elmouseout(){el.animate({"fill":col,"r":ELEMENT_RADIUS},150);
                               alert("first");
                               fadeTag();
                               });              
    )(c,i,elementColour);

c - это элемент. Затем я позже захочу отключить событие и присоединить еще одно:

(function (el){
    el.attr("fill",EXCLUDED_COLOUR);
    el.unmouseout(elmouseout);
    el.mouseout(function elmouseout(){
                       alert("second");
                       el.animate({"fill":EXCLUDED_COLOUR,"r":ELEMENT_RADIUS},150);
                       fadeTag();
                       });
})(setMainSeries[iPos]);

Но это придает обоим событиям. Оба оповещения срабатывают, позднее присоединенное событие срабатывает первым. Я хочу полностью отключить первое событие. Я неправильно использую unmouseout ()?

UPDATE

Я попробовал предложения от echo-flow и lincolnk, но ни один из них не сработал. Я думаю, что эхо-поток, скорее всего, сработает. Я отключил функцию, как это было предложено так ...

function elmouseoutDefault(el){
    el.animate({"fill":ELEMENT_COLOUR,"r":ELEMENT_RADIUS},150);
    alert("first");
    fadeTag();
};

затем прикрепил событие так, как я создал каждый элемент ...

el.mouseout(elmouseoutDefault);

Однако это не удалось, так как я не передаю el. Поэтому я изменил его на ...

el.mouseout(elmouseoutDefault(el));

Кажется, это вызывает elmouseoutDefault по мере добавления. Я только хочу, чтобы он срабатывал при событии mouseout.

Ответы [ 2 ]

0 голосов
/ 18 октября 2010

Я бы хотел проверить это по вашему рабочему коду, но, основываясь на опубликованном вами коде, вот что я думаю: в обоих фрагментах кода вы объявляете функцию "elmouseout".Синтаксис объявления функции, который вы используете, объявляет функцию в локальной области видимости (эквивалентно написанию «var elmouseout = function () {...}"), и поскольку вы объявляете каждую из них в отдельном закрытии функции, переменная "elmouseout "во втором кодовом блоке относится к функции" elmouseout "из второго кодового блока, в отличие от первого кодового блока, которая выдаст желаемое поведение.Я бы рекомендовал разбить объявления функций следующим образом:

function elmouseout(e){e.target.animate({"fill":col,"r":ELEMENT_RADIUS},150);
                               alert("first");
                               fadeTag();
                               }

    (function(el,iElPos,col){
        el.mouseout(elmouseout);              
    )(c,i,elementColour);


function elmouseout2(e){
                       alert("second");
                       e.target.animate({"fill":EXCLUDED_COLOUR,"r":ELEMENT_RADIUS},150);
                       fadeTag();
                       }

(function (el){
    el.attr("fill",EXCLUDED_COLOUR);
    el.unmouseout(elmouseout);
    el.mouseout(elmouseout2);
})(setMainSeries[iPos]);
0 голосов
/ 18 октября 2010

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

var elmouseout = null;

(function (el, iElPos, col) {

    elmouseout = function () {
        el.animate( {"fill": col, "r": ELEMENT_RADIUS }, 150);
        alert("first");
        fadeTag();
    };

    el.mouseout(elmouseout);

})(c, i, elementColour);


(function (el) {

    el.attr("fill", EXCLUDED_COLOUR);

    el.unmouseout(elmouseout);

    elmouseout = function () {
        alert("second");
        el.animate( { "fill": EXCLUDED_COLOUR, "r": ELEMENT_RADIUS}, 150 );
        fadeTag();
    };

    el.mouseout(elmouseout);

})(setMainSeries[iPos]);

edit: это предметная область - ваше определение elmouseout существует только в пределах самовозвратной функции.я думал о другой проблеме, связанной с именами функций.хотя код все еще должен работать.

...