Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Применение библиотек > установка обработчиков событий в HTML и Jquery


Автор: XaverOz 17.8.2011, 13:19
Есть кнопка у которой установлен обработчик события (в HTML onclick=) по нажатии на кнопку в событии хотелось бы что бы в следующий раз эта функция вызывалась с другим аргументом.
Код

<input class="mybtn" value="Нажми меня" type="button" onclick="inccount(1)" />


Код

function inccount(num) {
    alert(num++);
    // немогу придумать как сделать что бы в следующий раз функция вызвалась с параметром 2, на следующем клике 3 ...
}

P.S. понимаю что с помощью ready можно подписаться на событие нажатие кнопки, и в событии  удалять обработчик события и подписываться на новое, с увеличенным аргументом, но такая реализация мне совсем не нравится

Автор: CruorVult 17.8.2011, 13:51
Код

var num = 1; //глобальная переменная
function inccount() {
    alert(num++);   
}

Автор: Gold Dragon 17.8.2011, 14:19
а какие параметры должны меняться и на что? просто прибавлять 1?

если так, то вот написал примерчик
Код

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <script src="jquery.js"></script>
</head>
<body>
<h1>ЖмуИПлюсим</h1>
<hr/>
<p><a id="a1" href="javascript:void(0)">Жми меня</a></p>
<hr/>
<div id="div1"></div>
<script>
    $(function() {
        $click_buttom = 0;

        $("#a1").click(function() {
            $click_buttom ++;
            $("#div1").text('Вы нажали: '+$click_buttom+' раз');
            return false;
        });
    });
</script>
</body>
</html>

Автор: XaverOz 18.8.2011, 07:15
Изучаю JS сравнительно недавно и во всей литературе которая встречалась есть 2 кардинально разных подхода к вопросу области видимости:
1)  Любое использование глобальных переменных зло, пишите код вот так:
Код

function examplefunction {
    var variablexample1;
    variablexampl1 = "";
}

2) Использование глобальных переменных в коде позволительно, явное объявление переменных не обязательно 
Код

function examplefunction {
    variablexampl1 = "";
}

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

Автор: CruorVult 18.8.2011, 09:57
Цитата(XaverOz @  18.8.2011,  07:15 Найти цитируемый пост)
Любое использование глобальных переменных зло


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

Цитата(XaverOz @  18.8.2011,  07:15 Найти цитируемый пост)
Проблема в том что в реальном примере кода, на одной странице таких переменных у меня очень много (по одной кнопке, и переменной, на каждую запись в таблице)


Так можно просто создать глобальный объект
Код

var options = {};
options.but1 = 1;
options.but2 = 5;


Автор: Gold Dragon 18.8.2011, 14:08
что-то какая-то грандиозная задача smile

XaverOz, а тебе не кажется что такой подход к безопасности слишком крутой?  Javascript это вообще-то клиентская часть smile от кого защищать глобальные то? или ты сам себя боишься smile 

и вообще, задача получается не совсем определена... Конкретно скажи что нужно, конкретно напишу код ;)

Автор: Amphiluke 18.8.2011, 21:24
Цитата(Gold Dragon @  18.8.2011,  18:08 Найти цитируемый пост)
от кого защищать глобальные то? 

Обычно их защищают от конфликтов при попадании в одно пространство имен.

Для примера, который приводит ТС, уже давно придумали применять замыкания.
Код

$(".mybtn").click((function(num) {
    return function() { alert(num++); }
})(0));

Автор: Gold Dragon 19.8.2011, 07:20
Цитата(Amphiluke @  18.8.2011,  22:24 Найти цитируемый пост)
Обычно их защищают от конфликтов при попадании в одно пространство имен.

так такие конфликты могут возникнуть и с одинаковыми именами функций smile

Автор: Amphiluke 19.8.2011, 18:54
Цитата(Gold Dragon @  19.8.2011,  11:20 Найти цитируемый пост)
так такие конфликты могут возникнуть и с одинаковыми именами функций

Поэтому обычно используют конструкции с анонимными функциями, вызываемыми на месте.
Код

(function() {
    /* здесь могут быть любые именованные функции и переменные */
    /* здесь они полностью защищены от конфликтов с др. пространствами имен */
})();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)