Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> установка обработчиков событий в HTML и Jquery 
:(
    Опции темы
XaverOz
Дата 17.8.2011, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 9.3.2011

Репутация: нет
Всего: нет



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

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


Код

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

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

Это сообщение отредактировал(а) XaverOz - 17.8.2011, 13:24
PM MAIL   Вверх
CruorVult
Дата 17.8.2011, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 1
Всего: 28



Код

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

PM MAIL Skype   Вверх
Gold Dragon
Дата 17.8.2011, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



а какие параметры должны меняться и на что? просто прибавлять 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>



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
XaverOz
Дата 18.8.2011, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 9.3.2011

Репутация: нет
Всего: нет



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

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

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

function examplefunction {
    variablexampl1 = "";
}

Проблема в том что в реальном примере кода, на одной странице таких переменных у меня очень много (по одной кнопке, и переменной, на каждую запись в таблице)
PM MAIL   Вверх
CruorVult
Дата 18.8.2011, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 1
Всего: 28



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


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

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


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

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


PM MAIL Skype   Вверх
Gold Dragon
Дата 18.8.2011, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



что-то какая-то грандиозная задача smile

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

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


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Amphiluke
Дата 18.8.2011, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 17
Всего: 112



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

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

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

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

PM   Вверх
Gold Dragon
Дата 19.8.2011, 07:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



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

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


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Amphiluke
Дата 19.8.2011, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 17
Всего: 112



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

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

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

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.1186 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.