Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Что то не так с кодом (https://javascript.ru/forum/events/39089-chto-ne-tak-s-kodom.html)

Marker 14.06.2013 23:23

Что то не так с кодом
 
$('.delete').click(function(e) {
                e.preventDefault();
                var id = $(this).attr('id');
                $('.n_warning').fadeOut(500);
                $('.n_warning').fadeIn(500);
                $('.n_warning').html('<p>Are you sure? <button id=\"yes\">YES</button><button id=\"no\">NO</button></p>');

                    $('#yes').click(function(){
                        $.ajax({
                                type: 'POST',
                                url: '/admin/delete',
                                data: {
                                    id:id
                        },
                        success: function(data){
                            $('#'+id).fadeOut(500);
                    $('#adm-notification').html(data);
                }
            });
                     });
                    $('#no').click(function(){
                        $('.n_warning').fadeOut(500);
                    });
            });

Код вроде бы работает, все отлично. Но вот сделал один раз (т.е кликнул на .delete потом на #yes, отправил ajax, удалил из базы) после этого больше .delete не кликается, соответвенно .n-warning не появляется. В чем проблема?

danik.js 15.06.2013 00:11

Консоль браузера наверно для лохов придумали, правда?

Marker 15.06.2013 00:13

Консоль чист...

danik.js 15.06.2013 00:26

.delete случайно не внутри #adm-notification находится?

Marker 15.06.2013 00:43

Нет, вот код.

<div id="adm-notification">
                <div class="n_warning"><p></p></div>
                <div class="n_ok"><p></p></div>
                <div class="n_error"><p></p></div>
                </div>
                <table>
                    <thead>
                    <tr>
                        <th scope="col">ID</th>
                        <th scope="col">Category</th>
                        <th scope="col">Title</th>
                        <th scope="col">Image</th>
                        <th scope="col">Short</th>
                        <th scope="col">Date</th>
                        <th scope="col">Lang</th>
                        <th scope="col" style="width: 65px;">Modify</th>
                    </tr>
                    </thead>
                    <tbody>
                    <?php
                    while($result_main_arm = mysql_fetch_array($query_main_arm)){
                        print "
			 <tr id=".$result_main_arm['id'].">
                <td class=\"align-center\">".$result_main_arm['id']."</td>
                <td class=\"align-center\">".$result_main_arm['category']."</td>
                <td class=\"align-center\">".$result_main_arm['title']."</td>
                <td class=\"align-center\">".$result_main_arm['img']."</td>
                <td class=\"align-center\">".$result_main_arm['short_content']."</td>
                <td class=\"align-center\">".$result_main_arm['date']."</td>
                <td class=\"align-center\">".$result_main_arm['lang']."</td>
                <td>
                     <a href=\"/admin/edit?id=".$result_main_arm['id']."&lang=".$result_main_arm['lang']."\" class=\"table-icon edit\" title=\"Edit\"></a>
                    <a href=\"/admin/delete?id=".$result_main_arm['id']."&lang=".$result_main_arm['lang']."\" id=".$result_main_arm['id']." class=\"table-icon delete\" title=\"Delete\"></a>
                </td>
            </tr>
			";
                    }

devote 15.06.2013 00:47

повесьте событие таким образом:
$(document).on('click', '.delete', function(e) {
вместо:
$('.delete').click(function(e) {

danik.js 15.06.2013 01:07

Цитата:

Сообщение от Marker
Нет, вот код.

Ты че нерусский чтоли? Ты понимаешь смысл слова "внутри" ?

devote 15.06.2013 01:09

Цитата:

Сообщение от danik.js
Ты понимаешь смысл слова "внутри" ?

да не внутри у него... у него все гуд

Цитата:

Сообщение от Marker
<div id="adm-notification">
                <div class="n_warning"><p></p></div>
                <div class="n_ok"><p></p></div>
                <div class="n_error"><p></p></div>
тут блоку конец ->               </div>


Marker 15.06.2013 12:20

Цитата:

Сообщение от danik.js (Сообщение 256450)
Ты че нерусский чтоли? Ты понимаешь смысл слова "внутри" ?

Ты закалебал уже... внимательней смотри код!

Marker 15.06.2013 12:35

Цитата:

Сообщение от devote (Сообщение 256447)
повесьте событие таким образом:
$(document).on('click', '.delete', function(e) {
вместо:
$('.delete').click(function(e) {

Не помогло

bes 15.06.2013 13:37

ты когда по ссылке переходишь, то твой ajax в обработчике нажатия этой ссылки уже почти побоку становится
и слушай что danik.js говорит: смотри в консоль
там не только ошибки надо смотреть, но и выводить туда для проверки нужные параметры

Marker 15.06.2013 17:32

Цитата:

Сообщение от bes (Сообщение 256509)
ты когда по ссылке переходишь, то твой ajax в обработчике нажатия этой ссылки уже почти побоку становится
и слушай что danik.js говорит: смотри в консоль
там не только ошибки надо смотреть, но и выводить туда для проверки нужные параметры

Честно говоря не понял.

vadim5june 15.06.2013 17:53

по идее ссылка вот так должна выглядеть
<a href="#" id=".$result_main_arm['id']." class=\"table-icon delete\" title=\"Delete\"></a>

а в коде на 23 строчке еще return false нужно добавить
иначе у Вас ссылка срабатывает и все обработчики слетают

bes 15.06.2013 18:09

Цитата:

Сообщение от Marker
Честно говоря не понял.

href тоже работает
return false в конце обработчика клика на ссылке и твой success отработает, так как страница осталась той же
ну и стоит задуматься над тем, чтобы не городить такой код, находя элементы по id других элементов

bes 15.06.2013 18:17

Цитата:

Сообщение от vadim5june
иначе у Вас ссылка срабатывает и все обработчики слетают

обработчик срабатывает (запрос отправляется), но принять ответ уже некому

devote 15.06.2013 18:22

vadim5june,
bes,
у него же preventDefault стоит, зачем там return false
все правильно у него написано

vadim5june 15.06.2013 18:32

Цитата:

Сообщение от devote
у него же preventDefault стоит

Да-не заметил

Marker 15.06.2013 18:54

У меня все отлично, я проверял, запрос отправляется, и ответ приходит (succeess). Но вот после удаления, больше не нажимается .delete . Проблему решил тем, что добавил рефреш, после рефреша все ок. Но все же это не решение. Есть идеи?

bes 15.06.2013 19:06

Цитата:

Сообщение от devote
у него же preventDefault стоит, зачем там return false

Цитата:

Сообщение от vadim5june
Да-не заметил

и я туда не смотрел :)

bes 15.06.2013 19:22

Цитата:

Сообщение от Marker
больше не нажимается .delete

console.log/alert туда добавь и посмотри кликается или не кликается, он не может не кликаться, так как ты этот элемент выводишь один раз, один раз назначаешь ему обработчик и впоследствии этот элемент не заменяешь
и давай уже полный тестовый пример или ссылку на полный код

vadim5june 15.06.2013 19:23

Цитата:

Сообщение от Marker
Есть идеи?

когда Вы перезаписываете $('#adm-notification').html(data);
то div с class='n_warning' не надо бы трогать-куда то его вынести
иначе он в следующем цикле вот эти строчки
$('.n_warning').fadeOut(500);
не может выполнить

Marker 15.06.2013 19:36

после успешной обработки аякса, даже если на .delete алерт поставить не срабатывает

bes 15.06.2013 19:41

Цитата:

Сообщение от Marker
после успешной обработки аякса, даже если на .delete алерт поставить не срабатывает

в самом начале обработчика ставил?
и я думаю vadim5june разгадал твою загадку
у тебя на выводе /admin/delete что?

Marker 15.06.2013 19:41

Ну в общем я через рефреш страницы решил, думаю сойдет..

danik.js 15.06.2013 19:41

То есть после отработки обработчик click элементов .delete не вызывается вообще? Или вызывается, но делает то, что задумано? Не может же обработчик сам отсоединиться.. Изучай детальней в инспекторе. Смотри события, выполняй пошагово и т.д.

Marker 15.06.2013 19:41

на /admin/delete обработчик переменных, запрос к базе (удаление)

Marker 15.06.2013 19:42

да click не вызывается

bes 15.06.2013 19:46

Цитата:

Сообщение от Marker
на /admin/delete обработчик переменных, запрос к базе (удаление)

ты же в через data в $('#adm-notification').html(data); что-то выводишь
что?

danik.js 15.06.2013 20:46

Цитата:

Сообщение от Marker
да click не вызывается

Если ты
1) не снял обработчик через $('.delete').off
2) не удалил (или перезаписал) этот элемент
3) не перезагрузил страницу
4) не перехватил клик родителем
то такого быть просто не может.

Так что чета ты мутишь...

Marker 15.06.2013 21:50

он записывает succesfully deleted! Ну ладно, я уже решил проблему, после обработки делается рефреш..

bes 15.06.2013 22:20

Цитата:

Сообщение от Marker
он записывает succesfully deleted! Ну ладно, я уже решил проблему, после обработки делается рефреш..

и блок
<div class="n_warning"><p></p></div>
                <div class="n_ok"><p></p></div>
                <div class="n_error"><p></p></div>

исчезает навсегда :D

проблему ты не решил, так как это из тех случаев, когда проще переписать всё заново как надо ;)


Часовой пояс GMT +3, время: 02:03.