Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.04.2015, 18:34
Интересующийся
Отправить личное сообщение для igorz Посмотреть профиль Найти все сообщения от igorz
 
Регистрация: 19.09.2014
Сообщений: 23

Функция внутри анонимной функции
Здравствуйте,
пишу себе вот так:
(function () {
    function main() {
        $(document).ready(function () {
            $('#testHref').attr('onclick', 'second(); return false;');
            console.log($('#testHref').attr('onclick'));
        });
    }
    main();

    function second() {
        console.log("second message");
    }
})();

function test() {
    console.log("Test message");
}


Получается так, что у меня изначально на мой #testHref привязана функция test() - работает.
Далее, нахожу idшник #testHref и к нему привязываю 'second(); return false;'
Проверяю через вывод в консоль - да, привязало.
Но и конечно в итоге получаю при нажатии что 'second is not defined'.
Подскажите, пожалуйста, как правильно стоит проделывать то что я пытаюсь ?
Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 16.04.2015, 19:04
Профессор
Отправить личное сообщение для nikita.mmf Посмотреть профиль Найти все сообщения от nikita.mmf
 
Регистрация: 01.02.2010
Сообщений: 364

$('#testHref').on('click', function(ev){second(ev); return false;});

или
$('#testHref').on('click', second);
...
function second() {
   ...
   return false;
}
Ответить с цитированием
  #3 (permalink)  
Старый 16.04.2015, 19:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

igorz,
попробуйте назначать клик, а не истязать атрибуты.
Ответить с цитированием
  #4 (permalink)  
Старый 16.04.2015, 19:09
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

И $(document).ready(function () внутри функции это излишек.
Ответить с цитированием
  #5 (permalink)  
Старый 16.04.2015, 20:03
Интересующийся
Отправить личное сообщение для igorz Посмотреть профиль Найти все сообщения от igorz
 
Регистрация: 19.09.2014
Сообщений: 23

Сообщение от laimas Посмотреть сообщение
И $(document).ready(function () внутри функции это излишек.
Да, возможно. Но поставил скорее "на всякий случай".

Сообщение от nikita.mmf Посмотреть сообщение
$('#testHref').on('click', second);
...
function second() {
   ...
   return false;
}
Спасибо. Оно работает. Только пришлось ещё дополнительно убрать первую привязку, которая остаётся висеть на онклике.

Но всё-же не до конца понимаю.
На хабре нашёл что пишут вот так:

Получается что это, как там же написано, приватная область видимости, к которой я не могу добраться из внешней.
А что тогда происходит при вашем
$('#testHref').on('click', second);

что оно всё-же видится из внешней области ?

Ещё там-же (в той статье) в конце пишут про "пространство имён" с применением private и public методов. Такой подход применяется ? Стоит ли на него обратить внимание ?
var Module = (function () {
    var myModule = {};

    var _privateMethod = function () {
        console.log("privateMethod message");
        $(document).ready(function () {
            $('#testHref').attr('onclick', 'Module.newOnClick(); return false;');
        });
    };

    myModule.publicMethod = function () {
        console.log("publicMethod message");
        _privateMethod();
    };

    myModule.newOnClick = function () {
        console.log("myModule.newOnClick");
        $('#div-body').html('New Text Here');
    };

    return myModule; // returns the Object with public methods
})();

Module.publicMethod();
Ответить с цитированием
  #6 (permalink)  
Старый 16.04.2015, 20:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

igorz,
за строку 7 автора пиф-паф
Ответить с цитированием
  #7 (permalink)  
Старый 16.04.2015, 20:15
Интересующийся
Отправить личное сообщение для igorz Посмотреть профиль Найти все сообщения от igorz
 
Регистрация: 19.09.2014
Сообщений: 23

Собирал в кучу из разных примеров которые попадались. Всё так плохо ?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов функции страницы из расширения chrome nontxt Events/DOM/Window 0 09.02.2015 10:42
Как при клике использовать предыдущее значения переменной внутри функции akagloomy jQuery 7 29.01.2015 00:37
внутри функции конструкция If срабатывает и при выполнении и при невыполнении. wertmax Ваши сайты и скрипты 3 02.02.2014 14:50
Как в браузерах реализуются функции DOM (например createElement) iamme Общие вопросы Javascript 7 02.09.2011 20:26
функция внутри Live() срабатывает после второго клика Ad1r jQuery 7 09.08.2011 14:11