Показано с 1 по 4 из 4

Тема: Реализация условия в JS

  1. #1

    Регистрация
    15.11.2006
    Адрес
    Тольятти
    Сообщений
    2,698
    Доброе время суток!

    Есть небольшой скрипт:

    Код:
    var d = document;
    var winIE = (navigator.userAgent.indexOf("Opera")==-1 && (d.getElementById && d.documentElement.behaviorUrns)) ? true : false;
    
    function bodySize() {
    if(winIE && d.documentElement.clientWidth) {
    sObj = d.getElementsByTagName("body")[0].style;
    sObj.width = (d.documentElement.clientWidth<1003) ? "1003px" : "100%"; }}
    
    function init() {
    if(winIE) {bodySize(); }}
    onload = init;
    if(winIE) {onresize = bodySize;}
    Это эмулятор свойства "min-width" для "сами_знаете_какого_браузер а".
    Очень полезная штука. Только вот есть одна неприятность – строка "onload = init;". Все прекрасно работает, если в <body> нет своего onload-а. Если же помимо этого скрипта есть <body onload=""> – скрипт говорит "до свидания".

    Можно ли проверить в JS наличие атрибута onload у <body> и только если у него его нет – вызывать непосредственно в скрипте "onload = init;" ?

    Нет, можно, конечно, из скрипта вообще убрать "onload = init;" и прописывать вызов этой функции в <body> в каждом документе. Но я не думаю, что это оптимальное решение (далеко не во всех документах на сайте требуется onload у <body>).

    Заранее благодарю всех откликнувшихся.

  2. #2

    Регистрация
    11.02.2007
    Адрес
    Донецк, Украина
    Сообщений
    96
    эхх.. опять апаю старые топы.. но как говорица "лучше поздно..." )) учитывая что подобный вопрос появляется довольно часто.

    проверить, назначен ли обработчик события, можно просто сравнив его с null (или c false). Т.е. в случае Aykroyd&#39;a делаем так:

    Код:
    ...
    if(!window.onload) window.onload = init;
    ...
    - назначаем инит в качестве обработчика, только если уже нету своего обработчика

    развивая идею, можно сделать даже так:

    Код:
    ...
    old_handler = window.onload;
    window.onload = function() {
     *if(old_handler) old_handler();
     *init();
    }
    ...
    - назначаем новый обработчик, который выполняет вначале старый, если таковой был назначен, а потом еще и инит

  3. #3

    Регистрация
    15.11.2006
    Адрес
    Тольятти
    Сообщений
    2,698
    Спасибо, что откликнулись.
    В свое время этот мой пост так и остался без внимания.
    Но проблема уже давно себя исчерпала. Дело в том, что я сам здесь немного "перемудрил". Если у <body> есть onload, ничего не мешает просто продублировать в нем вызов "init" наряду с вызовом других функций...

  4. #4

    Регистрация
    11.02.2007
    Адрес
    Донецк, Украина
    Сообщений
    96
    а. я думал ты ищешь хитрые пути для того чтобы этого не делать ))) т.е. хочешь получить универсальный скрипт который можно будет просто включать в страницу например из внешнего файла не задумываясь что там у неё есть и ничего никуда не дописывая

Похожие темы

  1. Возможна ли реализация с помощью какого нить кода?
    от kokon в разделе Веб-программирование
    Ответов: 1
    Последнее сообщение: 29.12.2010, 13:56
  2. Реализация перезагрузки страницы.
    от the end в разделе Веб-программирование
    Ответов: 3
    Последнее сообщение: 21.02.2007, 15:05
  3. реализация граффити эффекта
    от prolll в разделе Flash-технологии
    Ответов: 11
    Последнее сообщение: 19.07.2005, 17:15

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •