Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 2
Регистрация: 17.01.2011
Сообщений: 103

Применить функцию к новым элементам

28.09.2017, 07:21. Показов 1020. Ответов 2

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Есть готовый модуль сортировки строк (менять местами строки путем перетаскивания), который мне более чем подходит, но он не применяется к вновь добавленным элементам (после загрузки DOM).

Подскажите, как исправить?

Ссылка на jsfiddle

HTML5
1
2
3
4
5
<div id="container">
    <div class="drag" data-co="1" id="1qw">1</div>
    <div class="drag" data-co="2" id="2as">2</div>
    <div class="drag" data-co="3" id="3zx">3</div>
</div><button>click</button>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
$.fn.draggable = function(){
    function disableSelection(){
    if (window.getSelection) {window.getSelection().removeAllRanges()} else {document.selection.empty()}
    return false;
    }
    $(this).on("mousedown", function(e){
        var drag = $(this);
        var posParentTop = drag.parent().offset().top;
        var posParentBottom = posParentTop + drag.parent().height();
        var posOld = drag.offset().top;
        var posOldCorrection = e.pageY - posOld;
        drag.addClass('dragActive');
        drag.parent().addClass('ccc');
        var mouseMove = function(e){
            if (e.which==1) {
                var posNew = e.pageY - posOldCorrection;
                if (posNew < posParentTop){
                    if (drag.prev().length > 0 ) {
                        drag.insertBefore(drag.prev().css({'top':-drag.height()}).animate({'top':0}, 100));
                    }
                    drag.offset({'top': posParentTop});
               } else if (posNew + drag.height() > posParentBottom){
                    if (drag.next().length > 0 ) {
                        drag.insertAfter(drag.next().css({'top':drag.height()}).animate({'top':0}, 100));
                   }
                    drag.offset({'top': posParentBottom - drag.height()});
               } else {
                    drag.offset({'top': posNew});
                    if (posOld - posNew > drag.height() - 1){
                        drag.insertBefore(drag.prev().css({'top':-drag.height()}).animate({'top':0}, 100));
                        drag.css({'top':0});
                        posOld = drag.offset().top;
                        posOldCorrection = e.pageY - posOld;
                    } else if (posNew - posOld > drag.height() - 1){
                        drag.insertAfter(drag.next().css({'top':drag.height()}).animate({'top':0}, 100));
                        drag.css({'top':0});
                        posOld = drag.offset().top;
                        posOldCorrection = e.pageY - posOld;
                    }
                }
            } else {
                mouseUp();
            }
        };
        var mouseUp = function(){
            $(document).off('mousemove', mouseMove).off('mouseup', mouseUp);
            $(document).off('mousedown', disableSelection);
            drag.animate({'top':0}, 100, function(){
              drag.parent().removeClass('ccc');
              drag.removeClass('dragActive');
              $('.drag').each(function (index) {
                  console.log($(this).data('co') + ' - ' + $(this).attr('id') + " | " + ++index);
              });
            });
        };
        $(document).on('mousemove', mouseMove).on('mouseup', mouseUp).on('contextmenu', mouseUp);
        $(document).on('mousedown', disableSelection);
        $(window).on('blur', mouseUp);
    });
}
 
$('.drag').draggable();
 
 
 
var tt = 3;
$("button").click(function() {
    console.log("click");
  $("#container").append('<div class="drag" data-co="'+ ++tt+'" id="'+tt+'cc">'+tt+'</div>');
});
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.09.2017, 07:21
Ответы с готовыми решениями:

Как применить функцию к нескольким элементам
Добрый день! Подскажите как оптимизировать код. Есть несколько списков html &lt;p class=&quot;push&quot;&gt;1&lt;/p&gt; &lt;ul...

Как обратиться к новым элементам после построения DOM?
На шаблоне решили поставить форму, слайдер делается после загрузки страницы (какой-то плагин в Джумле). http://2906660.ru Пытаюсь...

Применить функцию ко всем элементам массива
Подскажите - с примером - например как пройтись с php функцией strip_tags по всем элемента массива A(3,3) есть ли такая функция, или...

2
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
28.09.2017, 08:45
Немного измените процесс добавления нового элемента:

JavaScript
1
2
3
$('<div class="drag" data-co="'+ ++tt+'" id="'+tt+'cc">'+tt+'</div>')
.appendTo("#container")
.draggable();
фидл
0
0 / 0 / 2
Регистрация: 17.01.2011
Сообщений: 103
28.09.2017, 09:51  [ТС]
Решение плевое:
JavaScript
1
$(this).mousedown(function(e){
заменить на:
JavaScript
1
 $("#container").on("mousedown", '.drag', function(e){
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.09.2017, 09:51
Помогаю со студенческими работами здесь

Применить формулу к элементам массива
Дан массив X, содержащий 16 элементов. Вычислить и вывести значения di, где di=exi+2e-xi/sqrt(5+sin xi) и значения di&gt;0.1

Применить свойство к первым элементам списка
Нужно применить фон к первым элементам этого меню: &lt;div id=&quot;menu&quot;&gt; &lt;ul id=&quot;nav&quot;&gt; &lt;li&gt;&lt;a...

Не удается применить css стиль к элементам
&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt; &lt;html&gt; &lt;head&gt; ...

Применить стили к элементам в зависимости от условий
Для всех элементов, у которых нет класса www и нет атрибута id сделать цвет текста равным #f00; Для элементов с классом text-box...

Как применить код ко всем элементам на сайте
Как применить код ко ВСЕМ элементам на сайте?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru