Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Теги к постам (https://javascript.ru/forum/dom-window/86496-tegi-k-postam.html)

firep91613 16.06.2025 22:20

Теги к постам
 
Ребят, написал скрипт, для прицепления тегов к постам - https://jsbin.com/losuzaxore/edit?js,output

У меня вопрос: вот когда нажимаешь в браузере назад, а потом обратно, то у оригинального селекта опшены остаются выбраными как и до нажатия назад. А сами эти теги вставленные в .selected__items исчезают. Что нужно делать? Сразу искать у оригинального селекта все выбраные опшены и вставлять в .selected__items? Или можно как-то еще это регулировать?

firep91613 19.06.2025 21:30

Ребят, неужели никто с этим не сталкивался?

https://adminlte.io/themes/v3/pages/forms/advanced.html

Как они делают, что все что выбранно в элементах форм при нажатии "Назад" - "Вперед" в браузере остается так же как и было? А при перезагрузке страницы все обнуляется? В стораджи ничего не пишется...

ksa 19.06.2025 22:43

Цитата:

Сообщение от firep91613
Как они делают

Это лучше у них и спросить... ;)

Nexus 20.06.2025 11:44

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

firep91613 20.06.2025 22:04

Цитата:

Сообщение от Nexus (Сообщение 557529)
Это же, вроде как, особенность работы самого браузера.
Хром старается сохранить данные введенные в поля при перемещении пользователя по истории вкладки при синхронной загрузке этих страниц.

Ок. Вот я выделил теги и нажал "Назад" и "Вперед". На скрине они выделены, как и было.



Я пытаюсь вставить эти выделенные опшены в этот блок, который для юзеров показывает, что выбрано (class="selected__items"). Вот скрипт:
document.addEventListener('DOMContentLoaded', e => {
    const select = document.getElementById('tag_id');
    const length = select.options.length;

    for (let i = 0; i < length; i++) {
        console.log(select.options[i].selected); // все время false

        if (select.options[i].selected) {
            selectedItems.append(createTag(i, select.options[i].innerText));
        }
    }
});

Но консоль все время пишет false...

Что же делать? Как же быть?

firep91613 20.06.2025 22:04

Цитата:

Сообщение от ksa (Сообщение 557524)
Это лучше у них и спросить... ;)

Ага, так они и скажут )

Nexus 21.06.2025 00:38

Цитата:

Сообщение от firep91613
Что же делать? Как же быть?

select.value пробовали читать?

Цитата:

Сообщение от firep91613
Ага, так они и скажут )

Можете не спрашивать, а посмотреть реализацию в оф. репозиториях: Chromium, Firefox.

voraa 21.06.2025 11:20

Цитата:

Сообщение от firep91613
Что же делать? Как же быть?

Вместо события DOMContentLoaded в данном случае надо использовать событие 'pageshow'
window.addEventListener("pageshow", (ev) =>{
    const select = document.getElementById('tag_id');
    const length = select.options.length;

    for (let i = 0; i < length; i++) {
        console.log(select.options[i].selected); // все время false

        if (select.options[i].selected) {
            selectedItems.append(createTag(i, select.options[i].innerText));
        }
    }
});

Оно возникает, когда страница уже появилась и данные были восстановлены из внутреннего кеша (если они были запомнены)
Можно и проверять были ли данные восстановлены из кеша или страница полностью загрузилась заново.
ev.persisted === true, если страница была восстановлена из кеша.
Подробнее
https://developer.chrome.com/docs/we...ycle-api?hl=ru
https://developer.mozilla.org/en-US/...pageshow_event

firep91613 21.06.2025 16:42

voraa,
спасибо, это помогло. Правда я совсем забыл, что на админке висит middleware, который запрещает браузеру кэшировать страницы. Поэтому e.persisted всегда false. Но тем не менее работает как надо.

firep91613 21.06.2025 16:45

Помогите еще курсор сделать на всю высоту. У меня никак не получается... Я пробовал увеличивать font-size, но получается криво все.



https://jsbin.com/zakemetefi/edit?css,output

voraa 22.06.2025 11:38

Цитата:

Сообщение от firep91613
Помогите еще курсор сделать на всю высоту.

Мне кажется, что размер курсора определяется ОС, а не браузером.

firep91613 23.06.2025 22:28

voraa,
получилось :)



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