Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.11.2014, 12:37
Профессор
Отправить личное сообщение для Siend Посмотреть профиль Найти все сообщения от Siend
 
Регистрация: 04.02.2012
Сообщений: 196

НЕ работает onclick из внешнего .js
Помогите плиз решить проблему. Раньше у меня был этот же код который находился в основном файле html в тегах <script></script> и все замечательно работало. Потом я решил что нужно этот код оформить отдельным файлом и он перестал корректно работать.

внешний.js:
window.onload = function () {
...
    function CreatMenu() {
        ...
        for (var i = 0; i < ceMenu; i++)
            $('<div id="M' + i + '" class="arc"         onclick="testfunct()"            >' + (menuList[curMenu][1 + i]) + '</div>').appendTo('#menu').css({ 'top': (yMenu - 25) + 'px', 'left': (xMenu - 25) + 'px' });
        ...

    }

    function testfunct() {
        alert();
    }
...
}

Выдает ошибку
Uncaught ReferenceError: testfunct is not defined
onclick

Пытался сделать через EventHAndler - стало только хуже, поэтому решил пытаться допилить onclick.
Ответить с цитированием
  #2 (permalink)  
Старый 19.11.2014, 12:41
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Ну если уж говнокодить, то допиши там
window.testfunct = testfunct;

Ну или к той стремной jQuery цепочке добавь click(testfunct)

Последний раз редактировалось jsnb, 19.11.2014 в 12:43.
Ответить с цитированием
  #3 (permalink)  
Старый 19.11.2014, 12:45
Профессор
Отправить личное сообщение для Siend Посмотреть профиль Найти все сообщения от Siend
 
Регистрация: 04.02.2012
Сообщений: 196

Помогло, но хотелось бы узнать про решение не говнокодом)
Ответить с цитированием
  #4 (permalink)  
Старый 19.11.2014, 12:48
Профессор
Отправить личное сообщение для Siend Посмотреть профиль Найти все сообщения от Siend
 
Регистрация: 04.02.2012
Сообщений: 196

Помогло, да не очень(

мне нужно вызывать функцию с параметром, в итоге имею:
for (var i = 0; i < ceMenu; i++)
            $('<div id="M' + i + '" class="arc" >' + (menuList[curMenu][1 + i]) + '</div>').appendTo('#menu').css({ 'top': (yMenu - 25) + 'px', 'left': (xMenu - 25) + 'px' })         .click(testfunct(      menuList[curMenu][1 + i])      );


Но выполняется скрипт не правильно. Должен alert возникать по нажатию на div, а он его вызывает при создании элемента сразу столько раз сколько было создано элементов(
Ответить с цитированием
  #5 (permalink)  
Старый 19.11.2014, 12:51
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

А не говнокодом - это забыть про событийные атрибуты и использовать хотя бы делегирование, а не вешать обработчик на каждый элемент. И нафига window.onload, если используется jQuery, в котором есть ready.
Ответить с цитированием
  #6 (permalink)  
Старый 19.11.2014, 12:51
Профессор
Отправить личное сообщение для Siend Посмотреть профиль Найти все сообщения от Siend
 
Регистрация: 04.02.2012
Сообщений: 196

P.S.:

window.testfunct = testfunct;

помог как надо, но хотелось бы узнать про решение через eventHander
Ответить с цитированием
  #7 (permalink)  
Старый 19.11.2014, 12:53
Профессор
Отправить личное сообщение для Siend Посмотреть профиль Найти все сообщения от Siend
 
Регистрация: 04.02.2012
Сообщений: 196

Сообщение от jsnb Посмотреть сообщение
А не говнокодом - это забыть про событийные атрибуты и использовать хотя бы делегирование, а не вешать обработчик на каждый элемент. И нафига window.onload, если используется jQuery, в котором есть ready.
Я плохо знаю jquery, поэтому частично что не знаю пишу на javascript, а без window.onload во внешнем скрипте он вообще отказывался работать(
Ответить с цитированием
  #8 (permalink)  
Старый 19.11.2014, 12:53
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от Siend Посмотреть сообщение
Но выполняется скрипт не правильно. Должен alert возникать по нажатию на div, а он его вызывает при создании элемента сразу столько раз сколько было создано элементов(
Ну так естественно, если ты вызываешь обработчик сразу. Ну пиши тогда так, раз уж всё равно терять нечего:
click(function(){ testfunct(params) })

Последний раз редактировалось jsnb, 19.11.2014 в 12:55.
Ответить с цитированием
  #9 (permalink)  
Старый 19.11.2014, 12:55
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от Siend Посмотреть сообщение
без window.onload во внешнем скрипте он вообще отказывался работать(
Т.е. оставшуюся часть предложения ты не дочитал и по ссылке не ходил?
Ответить с цитированием
  #10 (permalink)  
Старый 19.11.2014, 12:56
Профессор
Отправить личное сообщение для Siend Посмотреть профиль Найти все сообщения от Siend
 
Регистрация: 04.02.2012
Сообщений: 196

Не, просто по суте же это одно и тоже? Или я путаю?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ajax при заходе на страницу из поисковика - не работает Алексей_ГР Ваши сайты и скрипты 2 03.09.2013 00:03
Не работает в мозиле onClick в динамических чекбоксах Igor2001 Элементы интерфейса 7 21.09.2011 11:31
Код работает не так как задумал. Обработчик onclick prowoke Общие вопросы Javascript 2 20.07.2011 23:31
Не работает код внутри циклов DZHETIGAPA Events/DOM/Window 1 21.06.2011 01:03
ява-скрипт выборочно работает-не работает zeta777 Internet Explorer 0 20.01.2010 11:41