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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

MihailM



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii, ясно , хотя это как хтмл же файл.. в пхп если файл я делал замену переменную заменял значением.. а здесь уже по другому всё..

Всего записей: 2498 | Зарегистр. 19-10-2003 | Отправлено: 23:22 20-12-2021 | Исправлено: MihailM, 23:28 20-12-2021
Mavrikii

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

Цитата:
хотя это как хтмл же файл.. в пхп если файл я делал замену переменную заменял значением.. а здесь уже по другому всё

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

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 23:42 20-12-2021
MihailM



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii, для меня сложновато .. хотя наверняка всё просто...

Всего записей: 2498 | Зарегистр. 19-10-2003 | Отправлено: 09:30 21-12-2021
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MihailM
просто, но не зная деталей я не могу ничего вам сказать бОльшего.

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 11:11 21-12-2021
MihailM



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

Цитата:
просто, но не зная деталей я не могу ничего вам сказать бОльшего.

Да это понятно , просто меня заинтересовало как переменные обозначить в хтмл из явы, хотя бы так.. Или в пхп обернуть  как ?? Какой знак обозначает переменную, если текстовая или просто  переменная к примеру в большинстве случаев обозначается "$" .. то вот как будет в хтмл.. Пример можно дать ... только я еще пока сам не определился, как получше сделать..Чтоб и ссылку не палить и вообще ..
---------
Думал мож по проще получится сделать , обозначил в хтмл переменную из Явы и всё ок... а тут вон как ...  
 
Добавлено:
Да кстати вот в примере ссылки :

Цитата:
?account=хххх&sum=#ma&customerEmail=хххх.ru&customerPhone=&desc=ххххх&detectDevice=1
 
А здесь просто вместо #ma , добавить такое выражение : function f2c(х) , или как то надо экранировать или как там, эту Ява кусок кода..

Цитата:
function f2c(x) {
  function convert(str, p1, offset, s) {
    return ((p1 - 32) * 5/9) + 'C';
  }
  var s = String(x);
  var test = /(\d+(?:\.\d*)?)F\b/g;
  return s.replace(test, convert);
}
 

======================
Блин , тут один вопрос решишь , так второй вопрос появляется %))
 
 
Добавлено:
Ладно , нафиг ... что то уже ничего не хочется. А то замучаю мелкими вопросами ...

Всего записей: 2498 | Зарегистр. 19-10-2003 | Отправлено: 11:38 21-12-2021 | Исправлено: MihailM, 12:03 21-12-2021
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую,  
такой вопрос -  
есть страница конфигурируемого товара, вот она (возможно доступна только под ЕС айпишником)
По умолчанию ни одна опция не выбрана.  
Если выбрать  хотя бы одну любую опцию, внизу под кнопкой добавления в корзину появляется таблица с tier prices.  
Так и должно быть, это работает правильно.  
Но после того, как таблица становится видимой и не пустой, должен измениться варнинг со * - вот этот текст -  * Select required options to see correctly prices and tier prices - должен скрыться и открыться Tier Prices:.
 
Это начинает срабатывать, если сначала выбрать какую-либо опцию,  потом снова установить ее как не выбранную, а потом выбрать ее еще раз. Т.е. почему то при первом событии не срабатывает.
 
вот собственно код -  

Код:
require(['jquery'],function($){
$(document).ready(function() {
respondToVisibility = function(element, callback) {
  var options = {
    root: document.documentElement
  }
  var observer = new IntersectionObserver((entries, observer) => {
    entries.forEach(entry => {
      callback(entry.intersectionRatio > 0);
    });
  }, options);
 
  observer.observe(element);
}
respondToVisibility($("div[data-role='tier-price-block']")[0], visible => {
  if((visible) && ($.trim($("div[data-role='tier-price-block']").html()).length > 0 )){
      $('.price-tier_caption').show();
    $('.price-tier_warning').hide();
   }
   else {
       $('.price-tier_caption').hide();
    $('.price-tier_warning').show();
   }
});
});
});
 

Где ошибка, как сделать чтобы срабатывало при первом событии?

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

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

Цитата:
Где ошибка, как сделать чтобы срабатывало при первом событии?

этот выполняется в 2 ситуациях.. когда страница загрузилась и когда выбрано заново по умолчанию выбор опции.
$.trim($("div[data-role='tier-price-block']").html()).length > 0 )
проще
$("div[data-role='tier-price-block']").is(':empty')
 

Цитата:
Т.е. почему то при первом событии не срабатывает.

а почему он должен срабатывать?
он срабатывает при первоначальном появлении элемента и, видимо, выбор значения по дефолту пересоздает его.
не проще отлавливать событие onchange для селекта?
 
 
Добавлено:
MihailM

Цитата:
Да кстати вот в примере ссылки :

на пальцах - чтобы js работал с ссылкой, она должна быть как то ему доступна.
где эта ссылка, этот текст, на странице с js кодом?

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 20:13 21-12-2021 | Исправлено: Mavrikii, 20:14 21-12-2021
MihailM



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

Цитата:
где эта ссылка, этот текст, на странице с js кодом?
Да, это один файл Js + форма, а ссылка в коде формы. Хотя , я немного запутался уже , где лучше это код выставить в js код , или в коде формы..
 

Всего записей: 2498 | Зарегистр. 19-10-2003 | Отправлено: 20:44 21-12-2021
Mavrikii

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

Цитата:
где лучше это код выставить в js код ,

какой этот?

Цитата:
А здесь просто вместо #ma , добавить такое выражение : function f2c(х)

уверены, что в ACTION атрибуте формы прописана вот такая строка?
и какой смысл вставлять туда эту "функцию", вам ее или аналог нужно просто вызвать в нужный момент, чтобы она заменили URL в ACTION на нужный вам?

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 20:46 21-12-2021
MihailM



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii, ну мне надо как то это #ma заменить на введенное значение , чтоб потом заменилось уже по вашей ссылки с примера по str.replace(!).. или мож добавить уже в имеющийся код.. Я просто еще тонкости не знаю как лучше всё таки..  
JS хорош  что он может работать практически везде, в отличие от пхп..
 
 
Добавлено:

Цитата:
уверены, что в ACTION атрибуте формы прописана вот такая строка?

нет там кажись вообще код на пхп файл или вызов процедуры на пхп.. Это я уже решил попробовать .. вроде всё ок , но вот замены #ma нет нифига..

Всего записей: 2498 | Зарегистр. 19-10-2003 | Отправлено: 21:28 21-12-2021 | Исправлено: MihailM, 21:33 21-12-2021
Mavrikii

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

Цитата:
JS хорош  что он может работать практически везде, в отличие от пхп.

не смешивайте разные понятия. не везде, не всегда, не все может.
https://jsfiddle.net/ry5vL4tn/
 

Цитата:
нет там кажись вообще код на пхп файл или вызов процедуры на пхп.. Это я уже решил попробовать .. вроде всё ок , но вот замены #ma нет нифига..

разберитесь с основами html, ощущение, что у вас мешанина в голове, нет четкого понятия что, где и как работает.
можно и в php сделать аналогично, если у вас есть именно код этой страницы. просто заменить строку сразу при генерации страницы.

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 21:36 21-12-2021 | Исправлено: Mavrikii, 21:38 21-12-2021
MihailM



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

Цитата:
разберитесь с основами html, ощущение, что у вас мешанина в голове, нет четкого понятия что, где и как работает.  
И я четкого ответа не давал я просто спросил как можно заменить переменную на хтмл , просто думал , что можно просто , как в пхп заменил переменную.. а с JS , не знаю как правильно это сделать..  
А вообще то да , я уже сам немного запутался , как правильно сделать ... Вроде одна  страничка с   формой + JS , а оказалось всё не так и просто %))
 
Добавлено:
да не надо было , я уже сам запутался .. а так спасибо.. буду смотреть - пробовать..

Всего записей: 2498 | Зарегистр. 19-10-2003 | Отправлено: 22:10 21-12-2021 | Исправлено: MihailM, 22:14 21-12-2021
Weinaum



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

Цитата:
не проще отлавливать событие onchange для селекта?

К этому и иду, без этого не решить основной задачи - и тут есть одна проблема.
Я надеюсь что страница у вас открывается? Если нет, я чуть позже сгенерирую проблему на доступном сервере.
 
Основная задача - на таких страницах с конфигурируемым товаром показывать цену в поле цены если изменилось кол-во. Пример как это реализовано на простых товарах - например вот на этой странице.
Разница в том, что в простом товаре массив tierPrices стабильный, и для упрощения передается из бакенда на фронт в виде json в дата-атрибуте одного из дивов.
В конфиг товаре и price и tier prices генерируются не только от кол-ва, но и от выбора опций, поэтому массив этот должен постоянно обновляться, как только обновилась любая из опций. И массив этом я в этом случае получаю не из бакенда, а собираю из таблицы tier price.  
Получается, что мне надо отлавливать любое событие, связанное с изменением опций, и пересобирать массив.  
И вот она моя проблема. Если вы посмотрите на страницу с конфиг-товаром, то там 4 влияющих на цены опций - material, layout, color и diameter.  
При этом material и diameter - это селекты, а вот layout и color классическими селектами или инпутами не являются. При выборе например какого-то цвета у дива добавляеся класс selected и атрубут aria-checked меняет значение c false на true.  
Если change у селекта я понимаю как отлавливать, то с этими псевдо-селектами - не совсем.
Может просто по любому клику по этому элементу сбрасывать массив и пересобирать? Будет ли это правильным решением?

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

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum
ну так слушайте https://developer.mozilla.org/ru/docs/Web/API/MutationObserver
любое изменение содержимого - срабатывает событие.
это в случае того, если работа выбора меняет что то на страницы, какие то параметры (даже текст/цену), которыми вы не можете управлять - сторонний виджет. отлавливает также добавление/удаление класса или атрибута.

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 11:12 22-12-2021 | Исправлено: Mavrikii, 11:19 22-12-2021
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
спасибо, работает и так и по простому клику - 2 проблемы остаются.
1. По первому клику, либо по первому изменению селекта не срабатывает.
2. Несмотря на то, что я очищаю массив, при выборе другой опции (где уже другие цены), данные не обновляются. Характерно, если код выполнить принудительно в консоле, то все срабатывает корректно, массив обновляется каждый раз...

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

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum
нужно видеть код в самом браузере, тогда можно отследить что и как работает.

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 00:18 23-12-2021
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
К сожалению, воссоздать проблему на доступном сервере проблематично, очень затратно по времени, а dev сервера все доступны только из рабочей сети.
Завтра постараюсь прокинуть один сервер для общего доступа на какое то время, отпишусь.
 

Всего записей: 2152 | Зарегистр. 18-06-2006 | Отправлено: 13:04 27-12-2021
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
вот на этой странице можно наблюдать в браузере (опять же не знаю, доступно ли не с ЕС айпи) - как видно, код работает криво.
Срабатывает не с первого и даже не со второго раза, далее, после того как сработал, при изменении опций, которые меняют цены, подставляет цены соот-ющие предыдущей опции. Как будто сначала значения массива подставляются, а потом он уже обновляется, так как если снова обновить опцию, то видим что подставятся предыдущие(не первые) значения.  
Есть еще пару глюков, но это уже все как я понимаю вторично.  
 

Всего записей: 2152 | Зарегистр. 18-06-2006 | Отправлено: 14:00 28-12-2021
Mavrikii

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

Цитата:
как видно, код работает криво

ну так вы не пытались же ничего сделать с mutationObserver, так и оставили с IntersectionObserver
вас, таким образом, волнует только когда появляется в области экрана, а не когда вообще происходят какие то изменения на странице.

Цитата:
        var observer = new IntersectionObserver((entries, observer) => {
          entries.forEach(entry => {
            callback(entry.intersectionRatio > 0);
          });
        }, options);

ну сделайте console.log('fired'); в коде обработки и увидите когда вызывается. по дебаггеру видно, то, что упомянул ранее.
он не срабатывает при выборе из селекта.. только при дефолте.

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 21:38 28-12-2021
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
спасибо, надо конечно mutationObserver поглубже изучить - пробелов у меня еще очень много.
Я нашел js файл, который отвечает за в том числе обновление цены для конфигурируемых продуктов - вот этот файл.  
Для удобства выложил этот файл сюда.
Там создал из своей функции метод _getTierPrices, который вызываю в методе _UpdatePrice.
В принципе, все работает, еще раз ссылка на страницу.
Есть несколько неточностей, но в их решении пока проблем не вижу, доработаю позже.  
 
Сначала я было хотел сделать вызов getTierPrices внутри методов _OnClick и _OnChange - вот так  
- что характерно, у меня на 3 локальных системах этот подход работал безупречно.  
А вот на dev сервере почему то обрабатывались корректно только изменения селектов, а клики по кастомным псевдоселектам не обрабатывались совсем. Странно, но так и не понял, почему, локально все так же точно, но все таки видимо какие то отличия есть, возможно, где то jquery версия или еще что то... надо бы конечно разобраться, но поскольку внутри _UpdatePrice работает, то в последний рабочий день года пусть останется так.  
 
пс. С наступающим новым годом, и еще раз спасибо за помощь, которую вы тут оказываете.

Всего записей: 2152 | Зарегистр. 18-06-2006 | Отправлено: 17:44 29-12-2021 | Исправлено: Weinaum, 17:45 29-12-2021
Открыть новую тему     Написать ответ в эту тему

Страницы: 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