Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » вопросы по javascript

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116

Открыть новую тему     Написать ответ в эту тему

Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum
https://developer.mozilla.org/ru/docs/Web/API/MutationObserver

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 10:06 30-10-2020
destiny child



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
кто-нить поможет понять как надо решить задачу по ожиданию выполнения массовых $.getJSON запросов?
Вроде как общая теория пишет что нужен подход в стиле:
 
var deferreds = [], index;
/*выкачиваем JSON ответ с 4 страниц*/
for (index = 0; index < 4; ++index) {
  deferreds.push($.getJSON("URL+${index}"));
}
$.when.apply($, deferreds).then(function() {
  display("All finished")
  /* обработка ответов*/
});
 
function display(msg) {
  $("<p>").html(String(msg)).appendTo(document.body);
}
 
т.е. создается точка ожидания, в которой сходятся все вызовы. Это конечно понятно.
но не понятно - а где хранятся сами результаты вызовов $.getJSON?
Т.е. вот по одиночному вызову - я дописываю .done(function(data){... обработка полученного JSON строкового результата в переменной data ...})
А тут-то такого нет. И плюс по факту логики мне каждый результат надо ДОоснастить текстовым уникальным суффиксом. Опять-таки - когда я делал одиночный вызов, то ПЕРЕД ним, я создавал суффикс, в функции обработки результатов я генерил нужный формат итогового результата, включая добавление уникального суффикса.
В коде теории выше вообще неясно - а где я теперь могу сгенерить суффикс для каждого вызова $.getJSON? Он ведь связан с конкретным URL конкретного $.getJSON. А в данной теории я получаю одним махом ожидание по всем асинхронным вызовам $.getJSON с их уникальными URL. Типа все результаты будут скопом, без разбора - кто, где, чьё... и в итоге не понятно и где результаты каждого из них отдельно и как соотнести откуда-то даже если и вытащенный результат с URL запроса Х, чтобы сгенерить нужный суффикс и дооснастить им этот результат запроса Х.
В возможно глупом варианте - но может в deferreds надо пару ключ-значение вставлять? ключ - суффикс, значение - результат вызова $.getJSON. Но там и результата-то еще нет. Там просто сам объект вызова передается...
 
P.S. насчет .then тоже странности - в одном месте пишут его, в другом только done советуют использовать. И чем же они так ОСОБЕННО отличаются?

Всего записей: 3275 | Зарегистр. 01-04-2006 | Отправлено: 20:52 13-11-2020 | Исправлено: destiny child, 20:59 13-11-2020
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
destiny child
ваш вопрос более уместен тут - Вопросы по jQuery

Цитата:
И чем же они так ОСОБЕННО отличаются?

done выполняется когда обещание выполнено, then позволяет создавать цепочку
 

Цитата:
а где хранятся сами результаты вызовов $.getJSON

https://stackoverflow.com/questions/13912775/jquery-deferred-getting-result-of-chained-ajax-calls
http://michaelsoriano.com/working-with-jquerys-ajax-promises-and-deferred-objects/
 

Цитата:
чтобы сгенерить нужный суффикс и дооснастить им этот результат запроса Х

используйте URL как ключ, если отличается.
 

Цитата:
$.when.apply($, deferreds).then(function() {
  display("All finished")
  /* обработка ответов*/
});

аргументом function будет массив с результатами в том порядке, в котором засунули в deferreds.
точнее - посмотрите arguments
 
ps: современный js поддерживает промисы и так
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Promise

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 21:25 13-11-2020 | Исправлено: Mavrikii, 21:58 13-11-2020
destiny child



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А есть ли в природе готовый инструмент/виджет на сабже, который представляет собой как бы распорядок дня в часах (с разбивкой на подблоки, кратные Эн минутам), ориентированный вертикально (часы работ построчно идут в первом столбце этого виджета). А в остальных столбцах (с произвольным их кол-вом - хоть 2, хоть 10) можно было бы размещать объекты, для которых этот распорядок дня и создается. И чтоб можно было мышкой натягивать для столбца Х/объекта Х его часы  работы/занятий кусочно. К примеру, от 13:00 потянул, зажав ЛКМ и до 14:30. Отпустил кнопку и создалось событие на это время для объекта Х. Потом так же для другого отрезка времени: с 18:15 до 19:45. Ну и, понятное дело, не только мышкой, но и чтоб программно можно было этот распорядок заводить.
 
Какие-либо календари не подходят, т.к в их самой сути вшито, что они на неделю/7 столбцов(Пн-Вс) - макс.работают. А надо произвольное кол-во объектов выводить. То 3, а то и все 13.
 
OpenSource инструмент!

Всего записей: 3275 | Зарегистр. 01-04-2006 | Отправлено: 12:34 19-11-2020 | Исправлено: destiny child, 15:44 19-11-2020
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
destiny child
в этом разделе пишут скрипты, а не ищут готовые.
 
а так я нечто подобное для себя реализовывал используя
https://www.jqwidgets.com/jquery-widgets-demo/demos/jqxscheduler/index.htm
создал сбоку блоки определенных размеров, чтобы сразу создавались по времени желаемые.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 21:58 19-11-2020 | Исправлено: Mavrikii, 21:59 19-11-2020
WONDROUS



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Просьба подсказать по плагину lightzoom, как, и можно ли, скопировать/перенести эти строки:

Код:
      html  = '<div id="lz-container">\
                 <div id="lz-box">\
                   <div id="lz-overlay"></div>\
                 </div>\
                 <div id="loading-center">\
                   <div id="loading-center-absolute">\
                     <div class="object" id="object_one"></div>\
                     <div class="object" id="object_two"></div>\
                     <div class="object" id="object_three"></div>\
                  </div>\
                 </div>\
               </div>';

из основного файла lightzoom.js в отдельный файл с этим кодом:

Код:
;( function( $ ) {
 
 $( '.lightzoom' ).lightzoom( {
   speed:                 400,
   imgPadding:            10,
   overlayOpacity:        '0.9',
   viewTitle:             true,
   isOverlayClickClosing: false,
   isWindowClickClosing:  true,
   isEscClosing:          true
 } );
 
} )( jQuery );

Всего записей: 3346 | Зарегистр. 30-06-2002 | Отправлено: 15:53 22-11-2020
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WONDROUS

Цитата:
как, и можно ли, скопировать/перенести эти строки:

хотите свой шаблон, что ли?

Код:
             defaults = {
        speed:                  400,
        imgPadding:             10,
        overlayOpacity:         '0.5',
        viewTitle:              false,
        isOverlayClickClosing:  false,
        isWindowClickClosing:   false,
        isEscClosing:           false,
     html: '<div id="lz-container">\
                 <div id="lz-box">\
                   <div id="lz-overlay"></div>\
                 </div>\
                 <div id="loading-center">\
                   <div id="loading-center-absolute">\
                     <div class="object" id="object_one"></div>\
                     <div class="object" id="object_two"></div>\
                     <div class="object" id="object_three"></div>\
                  </div>\
                 </div>\
               </div>'
};

далее, вместо $( 'body' ).append( html ); пишем

Код:
$( 'body' ).append( $this.settings.html );

и тогда можете добавлять свой код в  

Цитата:
$( '.lightzoom' ).lightzoom( {

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 22:51 22-11-2020 | Исправлено: Mavrikii, 23:16 22-11-2020
WONDROUS



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Что-то подобное, да. А то никак не получается сделать идентификатор для каждой галереи.

Всего записей: 3346 | Зарегистр. 30-06-2002 | Отправлено: 23:26 22-11-2020
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WONDROUS

Цитата:
А то никак не получается сделать идентификатор для каждой галереи.

можно просто передавать его и добавлять/менять в коде контейнера.
либо по css классу.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 23:30 22-11-2020
WONDROUS



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Спасибо за ответы! Я что-то не то делаю, так как получилось сделать разным только цвет фона (overlay).

Всего записей: 3346 | Зарегистр. 30-06-2002 | Отправлено: 00:19 23-11-2020
WONDROUS



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Извиняюсь, если что-то не то или не так спрошу, но можно ли этот код сделать внутри класса .slider?

Код:
;( function( $ ) {
 
 $( '.lightzoom' ).lightzoom( {
   speed:                 400,
   imgPadding:            10,
   overlayOpacity:        '0.8',
   viewTitle:             true,
   isOverlayClickClosing: false,
   isWindowClickClosing:  true,
   isEscClosing:          true
 } );
 
} )( jQuery );

Всего записей: 3346 | Зарегистр. 30-06-2002 | Отправлено: 18:20 27-11-2020
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WONDROUS

Цитата:
но можно ли этот код сделать внутри класса .slider?

что?

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 18:37 27-11-2020
WONDROUS



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
По типу того, как в css оборачивают.

Всего записей: 3346 | Зарегистр. 30-06-2002 | Отправлено: 18:41 27-11-2020
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WONDROUS

Цитата:
По типу того, как в css оборачивают

Внятно формулируйте, я не знаю что значит "по типу, как в css". Пример.
если речь о $( '.slider' ).lightzoom, то коду без разницы.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 18:42 27-11-2020 | Исправлено: Mavrikii, 18:45 27-11-2020
WONDROUS



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
А если в html есть .lightzoom, заменив его в JS на .slider, оно будет работать?

Всего записей: 3346 | Зарегистр. 30-06-2002 | Отправлено: 19:02 27-11-2020
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WONDROUS

Цитата:
А если в html есть .lightzoom, заменив его в JS на .slider, оно будет работать?


Цитата:
если речь о $( '.slider' ).lightzoom, то коду без разницы


Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 19:02 27-11-2020
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую, возникла некоторая путаница в связи с общим недостатком знаний - у меня 2 вопроса по одному коду. Начну по порядку.  
1. Нужно по событию (click, change) добавить элемент в дом для определенного класса для текущего элемента дом.  
Конкретно - есть класс 'product' , у него есть инпут типа number, нужно, если вводимое число меньше 1, добавить элемент с классом 'mage-error' и показать его.  Также, поскольку инпут можно менять не только напрямую, но и кликом по плюс- минус, нужно чтобы это сработало точно так же.  
Кроме того, если элемент внутри своего родителя существует, то не добавлять, иначе при каждом клике будет добавляться новое сообщение об ошибке.  
Сейчас, если элементов с классом product больше одного, то по нужному событию новый элемент mage-error добавляется ко всем продуктам.  
А по событиям по нижним элементам не добавляется вовсе.  
 
https://codepen.io/lagudal/pen/NWRrGKw
 
Вот код - верхняя часть обновляет qty по кликам, ее изменить нельзя. Нужно изменить, или полностью переделать часть, которая начинается /* show error message when qty < 1 */ ).  
Часть кода которая должна срабатывать в случае с случае когда  qty > 0, здесь  опущена, хотя она и важна по сути: в том коде идет обновлнение корзины аяксом. Но это второй вопрос, вначале хочу разобраться только с частью когда qty устанавливается меньше 1.  

Всего записей: 2152 | Зарегистр. 18-06-2006 | Отправлено: 21:48 15-12-2020
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum

Цитата:
добавить элемент с классом 'mage-error' и показать его.

не проще, чтобы он уже был и просто показывать/прятать его? зачем лишние манипуляции с DOM?
либо, аналогично, создавать его с помощью js один раз и только потом уже показывать/прятать.
 

Цитата:
кликом по плюс- минус

вы не выйдите кликом за пределы min и max (имею в виду встроенные в элемент формы и создаваемые браузером)
ну и сами, аналогично, можете просто проверять значение по клику на + или -, чтобы не выходило за пределы.
зачем при этом генерить ошибку и менять значения поля?
 

Цитата:
то по нужному событию новый элемент mage-error добавляется ко всем продуктам.  

потому что вы не привязываете его именно к тому элементу, от которого пришло события клика или изменения.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 21:55 15-12-2020 | Исправлено: Mavrikii, 22:03 15-12-2020
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
там немного сложнее все: в реальности каждый продукт в корзине создается js Ui-компонентом - а клик по плюс-минус вызывает обновление корзины аяксом, после чего элементы DOM продукт создаются заново.  Я вначале тоже хотел так - создать элемент error один раз и по кликам показывать или прятать - но после обновления аяксом элемент error пропадает, и для того чтобы он не пропадал надо залезать еще глубже.  
по поводу
Цитата:
вы не выйдите кликом за пределы min и max

как видно, если кликать по встроенным "стрелкам", то так и есть, но вот как раз если кликать по + или - то на 0 выхожу. В реальности получается, что когда аякс обрабатывает корзину с продуктом у которого qty == 0, то этот продукт просто удаляется из корзины. Само по себе это норм решение, но кому то взбрело в голову, что надо вот так, что мол человек может ошибиться и случайно нажать на " - "  и удалить продукт из корзины, так что надо вот именно так. Вышел на 0 - увидел ошибку. Нажал еще раз на "-" - ошибка не продублировалась. Ну в принципе этот вопрос можно решить и по другому - прятать через таймаут.  
Главное, что тут все таки придется или каждый клик создавать элемент error (убирать на самом деле не надо, он сам удалиться после обновления аяксом), либо копаться глубже в коде обновления корзины и там создать этот элемент.

Всего записей: 2152 | Зарегистр. 18-06-2006 | Отправлено: 22:25 15-12-2020
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum

Цитата:
Вот код - верхняя часть обновляет qty по кликам, ее изменить нельзя

она написана не ахти, удобнее было бы так https://jsfiddle.net/kojLpm5v/1/
и не используйте codepen - он не дает сохранить изменения без аккаунта.
 
но из примера видно как цеплять ошибку после, а не везде
 

Цитата:
Вышел на 0 - увидел ошибку

смотрите пример - просто триггерните событие изменения поля ввода.
 
и пример преобразует строку в число (через * 1), но при этом ему все равно float или int

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 22:31 15-12-2020 | Исправлено: Mavrikii, 22:38 15-12-2020
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116

Компьютерный форум Ru.Board » Интернет » Web-программирование » вопросы по javascript


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru