Функция в функции. Обработчики клика. Запутался =)
Всем здравия!
Вот не могу понять в чем загвоздка: $(document).ready(function() { //вешаем обработчика клика по кнопке - оформить заказ $('#click1 img').click(function() { //вешаем обработчик клика по кнопке - отправить заказ $('#click2 img').click(function() { //если выполнены некоторые условия(правильно заполнен емэил и т.п.) то отсылаем на сервер данные if(key == true){ $.post(); // отсылаем на сервер данные } }); }); }); Так вот, если посетитель кликает по #click1, потом выходит из этой формы, чтобы добавить в заказ еще чтонибудь, опять кликает по #click1, потом по #click2 - эта форма отсылается 2 раза. Первый раз - форма - когда юзер первый раз кликнул по #click1, второй раз - когда был произведен второй клик по #click1. (Форму будет отсылаться столько раз - сколько раз посетитель вышел из формы - оформить заказ, а потом вернулся к ней) Почему так происходит - понять не могу. |
Цитата:
Кликая на БТ1, ты прописал две функции (одинаковые) на БТ2... См. мой пример <!DOCTYPE html> <html> <head> <script src="http://code.jquery.com/jquery-latest.js"></script> <style type="text/css"> </style> <script type="text/javascript"> $(document).ready(function (){ $('#bt1').click(function () { alert('bt1') $('#bt2').click(function () { alert('bt2') }) }) }) </script> </head> <body> <input id='bt1' type='button' value='bt1' /> <input id='bt2' type='button' value='bt2' /> </body> </html> </body> </html> |
О, отличный пример. Только я не могу понять его =)
Первый раз прик клике на БТ2 - нет действия - это ясно, мы вешаем на него обработчик только после клика по БТ1. Первый клик на БТ1. Потом клик на БТ2 - выполняется алерт БТ2 - это тоже ясно Не понятно почему после второго(третьего, четвертого) клика на БТ1, выолняется два(три, четыре) алерта БТ2. |
Цитата:
|
Ааа..я думал обработчик вешается один всегда на конкретное действие. А он оказывается прибавляется.
А как же сделать, чтобы при клике(любом количестве кликов) на БТ1 вешался только один обработчик БТ2. Другими словами мне нужно, чтобы один раз на сервер данные отсылались $.post'ом. Сделать функции не вложенными не могу - потому что при клике на первой кнопке, создаются переменные, которые впоследствии тоже должны уйти на сервер с кликом на второй кнопке. |
Цитата:
Ну на крайняк просто мочить обработчики перед присваиванием... $('#bt2').unbind('click') |
Цитата:
Щас попробую замочить... |
ksa,
Спасибо Тебе, выручил. |
Цитата:
Сын звонит матери: - Мам, тут отец полотенце вином испачкал... Его замочить? - Оца не трогай!!! А полотенце в стирку брось... |
Часовой пояс GMT +3, время: 19:27. |