Функция в функции. Обработчики клика. Запутался =)
Всем здравия!
Вот не могу понять в чем загвоздка:
$(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, время: 03:04. |