Добавление вызова функции javascript к событию (например, «window.resize») вместо перезаписи того, что уже есть - PullRequest
0 голосов
/ 28 июня 2011

Есть ли способ сказать браузеру запустить дополнительную функцию java-скрипта для события, такого как 'window.resize', вместо того, чтобы перезаписывать то, что уже есть?

Использование jquery's

$(window).resize(<something>);

Кажется, чтобы заменить то, что уже есть. Есть ли способ сказать ему, чтобы сделать что-то дополнительно? Это плохой дизайн / неправильный способ сделать это?

Ответы [ 4 ]

3 голосов
/ 28 июня 2011

Я бы не думал, что jQuery сломает то, что там есть, но вы могли бы обернуть функции в одну функцию:

    // if a function already exists...
if( window.onresize ) {
    var prev_func = window.onresize;  // cache the old function

    window.onresize = function( event ) {  // new function for resize

        prev_func.call( window, event );  // call the old one, setting the
                                          //  context (for "strict mode") and 
                                          //  passing on the event object

        // call your code or function

    };
}

РЕДАКТИРОВАТЬ: Исправлено использование onresize вместо resize.

РЕДАКТИРОВАТЬ2: Пропустил один! Исправлено.

1 голос
/ 28 июня 2011

См. element.addEventListener ( element.attachEvent в IE 8 и ниже):

// Standards
if (window.addEventListener){
    window.addEventListener("resize", callOnResize, false); 
// IE 8 and under
} else if (window.attachEvent){
    window.attachEvent('resize', callOnResize);
}

function callOnResize() {
  console.log("resized");   
}

Имейте в виду, что это чистый JavaScript - jQuery (и практически любая большая библиотека JS) имеет метод для обработки создания стандартов и обработчиков IE без необходимости их написания. Тем не менее, хорошо знать, что происходит за кулисами.

1 голос
/ 28 июня 2011

Если вы используете jQuery для связывания всех обработчиков событий, то вы ничего не нарушаете. jQuery поддерживает несколько обработчиков для одного и того же события.

Но если другой код (не использующий jQuery) связывается с событием, то вы перезапишете обработчик своим оператором. Решение будет таким: всегда используйте jQuery для привязки событий или пытайтесь сохранить старый обработчик (см. ответ Патрика Д. * ).

0 голосов
/ 28 июня 2011

jQuery и все другие фреймворки, поддерживающие пользовательские события, присоединяют функцию к событию элемента (или наблюдают за ним).Затем эта функция запускает все функции, которые были связаны (используя привязку) для определенного типа события.

Domelement.addEventListener не переопределяет другую функцию, и добавленная вами функция не может быть удаленадругим (плохим) javascript, за исключением случаев, когда он будет знать точный след вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...