Javascript-форум (https://javascript.ru/forum/)
-   Opera, Safari и др. (https://javascript.ru/forum/css-html-browser/)
-   -   Почему отображение элемента через JS некорректно работает в Safari на IOS? (https://javascript.ru/forum/css-html-browser/85298-pochemu-otobrazhenie-ehlementa-cherez-js-nekorrektno-rabotaet-v-safari-na-ios.html)

A750 15.06.2023 13:31

Почему отображение элемента через JS некорректно работает в Safari на IOS?
 
Добрый день!

solved

рони 15.06.2023 13:55

A750,
на всякий случай лучше изменять свойство style.display, а не все свойства сразу style.cssText .
https://learn.javascript.ru/styles-and-classes

A750 15.06.2023 14:31

Цитата:

Сообщение от рони (Сообщение 552383)
A750,
на всякий случай лучше изменять свойство style.display, а не все свойства сразу style.cssText .
https://learn.javascript.ru/styles-and-classes

Спасибо, ознакомился!
Я пробовал добавить новый класс с прописанными в css параметрами для него.
Но тогда отображение перестаёт работать даже в браузере на компьютере ...

рони 15.06.2023 14:36

A750,
может макет полностью?

[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

A750 15.06.2023 15:01

solved

рони 15.06.2023 15:30

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

if (arropen[1] != `${attr}`) {
         let elem = document.getElementById(`${arropen[1]}`);
         if(elem)  elem.style.display = 'block';
      }

и так по всему коду.
клик в клике тоже опасно назначать, можно назначить слишком много обработчиков одного и того же.

A750 15.06.2023 15:37

Понял
Буду улучшать
Это мой первый в жизни код

рони 15.06.2023 15:49

A750,
let guessitem = document.getElementById(`${a}`);
if(!guessitem) return;

A750 15.06.2023 15:56

Прописал
На комп по-прежнему работает
В Сафари по-прежнему не хочет)

ksa 15.06.2023 16:02

Цитата:

Сообщение от A750
Это мой первый в жизни код

Первый в жизни код выглядит примерно так

alert('Привет мир')


А ты уже куролесишь по взрослому! :nono:

A750 15.06.2023 16:10

Цитата:

Сообщение от ksa (Сообщение 552391)
Первый в жизни код выглядит примерно так

alert('Привет мир')


А ты уже куролесишь по взрослому! :nono:

=))))

Да, в начале скрипта это было прописано, даже и осталось там)

voraa 15.06.2023 17:22

Какая версия сафари?
У вас a - случайное число от 1000 до 1019. Но не видно элементов с такими id

A750 15.06.2023 17:31

На том, что под рукой - 14.8.1
На более свежем - сейчас не знаю, но там то же самое

Элементы с таким id, конечно же есть)
Их видно в html
Ну и на компьютере всё работает...

voraa 15.06.2023 17:59

Все равно, какая то странная обработка кликов.
Когда будет клик по guessitem сработает сначала обработчик, повешанный на него, а потом снова сработает обработчик клика, повешанный на window. На guessitem повесится новый обработчик, и следующий раз при клике на нем сработают оба.

A750 15.06.2023 18:08

Цитата:

Сообщение от voraa (Сообщение 552395)
Все равно, какая то странная обработка кликов.
Когда будет клик по guessitem сработает сначала обработчик, повешанный на него, а потом снова сработает обработчик клика, повешанный на window. На guessitem повесится новый обработчик, и следующий раз при клике на нем сработают оба.

До этого я ещё не дошёл, посмотрю...
Пока всё выглядит корректно и работает. Но только на компьютере)

A750 15.06.2023 19:12

Дело, похоже, вообще не в js
Я сделал по-умолчанию всегда видимыми эти объекты - на телефоне они всё-равно не отображаются

voraa 15.06.2023 19:24

Я вообще не понимаю, как это у вас работает
Возьмем строки 17- 23. Когда первый раз выполняется. Допустим клик по элементу с id "1"

let attr = itemimg.getAttribute('id'); // "1"
arropen.unshift(`${attr}`); // ["1"]
if (arropen[1] != `${attr}`) { arropen[1] === undefined условие выполняется
document.getElementById(`${arropen[1]}`).style.cssText = 'display: block;'; // getElementById("undefined") вернет null и будет ошибка

(Если attr строка, то зачем писать `${attr}`, когда можно просто attr?)

И, кстати, ошибка в css. Строка 46
nbox-shadow: 3px 3px 3px red;

A750 15.06.2023 20:20

Спасибо за внимание к коду, но прошу прощения за время, которое вы потратили на css - это не ошибка - это пометка, данная строка закомментирована)
В процессе поиска причины, я комменчу много строк и ставлю пометки.


Возвращаясь к сабжу:
Выяснил опытным путём, что дело совершенно не JS.
Элемент, который я хочу отобразить, на самом деле пустой - там есть только фон, созданный через css. Так вот пустой элемент только с фоном мобильное устройство не отображает!!! Как так-то?...:blink:

voraa 15.06.2023 20:25

Цитата:

Сообщение от A750
это пометка, данная строка закомментирована)

А так можно было !!!? (обычно в css комментируют /* */)
Цитата:

Сообщение от A750
Выяснил опытным путём, что дело совершенно не JS.

Непонятно только, как это работает в винде.
В консоле нет ошибок?

A750 15.06.2023 20:32

Цитата:

Сообщение от voraa (Сообщение 552402)
А так можно было !!!? (обычно в css комментируют /* */)

Я в scss пишу)

Цитата:

Сообщение от voraa (Сообщение 552402)
Непонятно только, как это работает в винде.
В консоле нет ошибок?

Есть, конечно
Те, о которых вы говорите
Но на работу не влияют - с каждым нажатием запускается новый цикл - и там ошибки уже нет, тк массив вынесен за пределы функции, и его содержимое сохраняется

A750 15.06.2023 21:02

В общем, это фэйспалм.
Тег <img> без содержимого, только с одним фоном, установленным в css, мобильный браузер не отображает.
Заменил его на div - всё заработало. Десять часов искал...


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