Показать сообщение отдельно
  #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>
Ответить с цитированием