Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.12.2011, 15:19
Аспирант
Отправить личное сообщение для n1ko Посмотреть профиль Найти все сообщения от n1ko
 
Регистрация: 08.11.2011
Сообщений: 37

Ненужное клонирование выполнения функции
Доброго времени суток. У меня возникла серьёзная проблема.
Я написал упрощённый вариант скрипта, где срабатывает та же гадость что и в основном.
Пару слов. Есть кнопка "удалить". Нажимая на которую мы получаем интерфейс где подтверждаем или отменяем. Тут даже без разницы на которую жать. Сама суть вот в чём.
Нажимаем на "Удалить", получаем кнопки. Жмём на "Нет" и получаем сообщение "Отменили". Интерфейс скрывается. Отлично. Теперь опять нажмём на "Удалить" и потом опять на "Нет" и к нашему удивлению сообщение "Отменили" выводится 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>
Ответить с цитированием
  #2 (permalink)  
Старый 15.12.2011, 15:32
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

$(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, вы каждый раз добавляете события кнопкам да и нет.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #3 (permalink)  
Старый 15.12.2011, 15:41
Аспирант
Отправить личное сообщение для n1ko Посмотреть профиль Найти все сообщения от n1ko
 
Регистрация: 08.11.2011
Сообщений: 37

Спасибо Вам огромное. Теперь я понял в чём проблема и буду иметь это ввиду! Спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прерывание выполнения функции 0931454574 jQuery 2 10.08.2011 12:42
Ожидание выполнения всей анимации в функции ravisen AJAX и COMET 5 15.05.2011 22:14
Остановка выполнения функции Woody jQuery 12 18.01.2011 13:00
Условие выполнения функции TAILER Events/DOM/Window 2 28.02.2010 23:26
Как дождаться полного выполнения функции? San4ezy Events/DOM/Window 13 15.11.2009 19:41