Ненужное клонирование выполнения функции
Доброго времени суток. У меня возникла серьёзная проблема.
Я написал упрощённый вариант скрипта, где срабатывает та же гадость что и в основном. Пару слов. Есть кнопка "удалить". Нажимая на которую мы получаем интерфейс где подтверждаем или отменяем. Тут даже без разницы на которую жать. Сама суть вот в чём. Нажимаем на "Удалить", получаем кнопки. Жмём на "Нет" и получаем сообщение "Отменили". Интерфейс скрывается. Отлично. Теперь опять нажмём на "Удалить" и потом опять на "Нет" и к нашему удивлению сообщение "Отменили" выводится 2 раза друг за другом. Теперь давайте обновим страничку и нажмём на "Удалить" 3 раза. А потом на "Да" (или же на "Нет") и получим 3 сообщения друг за другом. <html> <head> <title>Удаление</title> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script> $(document).ready(function(){ $('.cpanel').append('<input type="button" name="delete" value="Удалить" />'); $('.cpanel').append('<div class="fDelete" style="display: none;" />'); $('.fDelete').append('Вы уверенны, что хотите удалить выбранную категорию?<br />' + '<input type="button" name="yes" value="Да" />' + '<input type="button" name="no" value="Нет" />'); $(':button[name=delete]').live('click', function(){ Delete(); }); function Delete() { var checkOn = $(':checkbox[name=c]:checked').length; if(checkOn != 0) { $('.fDelete').slideDown(200); $(':button[name=yes]').live('click', function(){ $('.fDelete').slideUp(200, function(){ alert('Удалили'); }); }); $(':button[name=no]').live('click', function(){ $('.fDelete').slideUp(200, function(){ alert('Отменили'); }); }); } else { alert('Сперва выберите категории для удаления.'); } } }); </script> </head> <body> <div class="cpanel"></div> <div class="c"><input type="checkbox" name="c" value="c1" />Категория 1</div> <div class="c"><input type="checkbox" name="c" value="c2" />Категория 2</div> <div class="c"><input type="checkbox" name="c" value="c3" />Категория 3</div> <div class="c"><input type="checkbox" name="c" value="c4" />Категория 4</div> </body> </html> |
$(document).ready(function(){ $('.cpanel').append('<input type="button" name="delete" value="Удалить" />'); $('.cpanel').append('<div class="fDelete" style="display: none;" />'); $('.fDelete').append('Вы уверенны, что хотите удалить выбранную категорию?<br />' + '<input type="button" name="yes" value="Да" />' + '<input type="button" name="no" value="Нет" />'); $(':button[name=delete]').live('click', function(){ Delete(); }); function Delete() { var checkOn = $(':checkbox[name=c]:checked').length; if(checkOn != 0) { $('.fDelete').slideDown(200); } else { alert('Сперва выберите категории для удаления.'); } } $(':button[name=yes]').live('click', function(){ $('.fDelete').slideUp(200, function(){ alert('Удалили'); }); }); $(':button[name=no]').live('click', function(){ $('.fDelete').slideUp(200, function(){ alert('Отменили'); }); }); }); У вас просто дело в том, что когда вы вызываете функцию Delete, вы каждый раз добавляете события кнопкам да и нет. |
Спасибо Вам огромное. Теперь я понял в чём проблема и буду иметь это ввиду! Спасибо!
|
Часовой пояс GMT +3, время: 19:32. |