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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 117 118 119 120 121 122 123 124 125

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

MihailM

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

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

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

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

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

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

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

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

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

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

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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);
}
 

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

Всего записей: 2674 | Зарегистр. 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();
   }
});
});
});
 

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

Всего записей: 2156 | Зарегистр. 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 кодом?

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

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

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

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

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

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

какой этот?

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

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

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

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

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

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

Всего записей: 2674 | Зарегистр. 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 сделать аналогично, если у вас есть именно код этой страницы. просто заменить строку сразу при генерации страницы.

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

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

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

Всего записей: 2674 | Зарегистр. 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 у селекта я понимаю как отлавливать, то с этими псевдо-селектами - не совсем.
Может просто по любому клику по этому элементу сбрасывать массив и пересобирать? Будет ли это правильным решением?

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

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

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



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

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

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

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



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

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



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

Всего записей: 2156 | Зарегистр. 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'); в коде обработки и увидите когда вызывается. по дебаггеру видно, то, что упомянул ранее.
он не срабатывает при выборе из селекта.. только при дефолте.

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



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

Всего записей: 2156 | Зарегистр. 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 117 118 119 120 121 122 123 124 125

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


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru