Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.02.2022, 11:51
Аспирант
Отправить личное сообщение для Alexander3928 Посмотреть профиль Найти все сообщения от Alexander3928
 
Регистрация: 19.05.2021
Сообщений: 75

Как вызвать функцию и ее элементы из другого файла?
Добрый день всем! Забыл эти тонкости с функциями, когда функция в другом файле, а нужно ее элементы записать внутри другого элемента. Дает undefined

HTML
<main class="main">
  <div class="container"></div>
</main>
 <script type="module" src="./init.js"></script>


init файл
import { functeSt1 } from './cube.js';
import { functeSt2 } from './test.js'

const initMenu = document.querySelector(".header__menu");

initMenu.addEventListener("click", funcInitMenu);

function funcInitMenu(event) {
    const target = event.target;
    const container = document.querySelector(".container");

    if (target.id === "test1") {
        container.innerHTML = functeSt1();
        console.log("1");
    }
    if (target.id === "test2") {
        container.innerHTML = functeSt2();
        console.log("2");
    }
}


2 файл
function functeSt1() {

    const container = document.querySelector(".container");

    const test1 = `
        <button>TEST1</button>
    `;

    const test2 = `
        <button>TEST2</button>
    `;

    const test3 = `
        <button>TEST3</button>
    `;
    container.innerHTML = test1;
    container.innerHTML += test2;
    container.innerHTML += test3;

    // return functeSt1(); /* Error Maximum call stack size exceeded*/
    // return test1, test2, test3; /* Неудобно + загрузится только последний test3 */
}

export {functeSt1}

3 файл
function functeSt2() {
    const container = document.querySelector(".container");

    function html1() {
        const test2 = `
            <button>TEST2</button>
        `;
        container.innerHTML = test2;
    }

    function html2() {
        const test3 = `
            <button>TEST3</button>
        `;
        container.innerHTML += test3;
    }
}

export { functeSt2 }
Ответить с цитированием
  #2 (permalink)  
Старый 18.02.2022, 12:09
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от Alexander3928
Забыл эти тонкости с функциями, когда функция в другом файле, а нужно ее элементы записать внутри другого элемента.
Тут проблема вообще в понимании того что может делать функция...

Насколько я понял, твои функции должны просто вернуть строку с хтмл разметкой.
Потом весь этот текст можно будет вставить в любой элемент на странице...
Ответить с цитированием
  #3 (permalink)  
Старый 18.02.2022, 12:19
Аспирант
Отправить личное сообщение для Alexander3928 Посмотреть профиль Найти все сообщения от Alexander3928
 
Регистрация: 19.05.2021
Сообщений: 75

b]ksa[/b],
Да 2 месяца так не делал с функциями и забыл . На счёт хтмл, да мне нужно просто перезаписовать элементы внутри container, в зависимости куда я кликаю из проверки if.
Ответить с цитированием
  #4 (permalink)  
Старый 18.02.2022, 12:34
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Alexander3928, вот пусть твои функции формируют текст с разметкой и этот текст возвращают...
Ответить с цитированием
  #5 (permalink)  
Старый 18.02.2022, 13:04
Аспирант
Отправить личное сообщение для Alexander3928 Посмотреть профиль Найти все сообщения от Alexander3928
 
Регистрация: 19.05.2021
Сообщений: 75

ksa,
Я так и сделал. Просто элементы которые должны загрузится находятся в другом файле и если я буду вызывать функцию из другого файла, мне показывает undefined. И я не могу понять почему. Хотя если эту функцию создать в файле init.js, где я ее вызываю, тогда все будет окей, без undefined.
Ответить с цитированием
  #6 (permalink)  
Старый 18.02.2022, 13:53
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от Alexander3928
container.innerHTML = functeSt1();
Сообщение от Alexander3928
container.innerHTML = functeSt2();
functeSt1 и functeSt2 должны возвращать строки
Но у Вас нет в них оператора return. Они ничего не возвращают. undefined.
Ответить с цитированием
  #7 (permalink)  
Старый 18.02.2022, 13:58
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от Alexander3928
Я так и сделал.
voraa тебе показал что ты не сделал того, про что я тебе писал.
Если функции будут таки возвращать строки с разметкой - у тебя не будет undefined .
Ответить с цитированием
  #8 (permalink)  
Старый 18.02.2022, 14:57
Аспирант
Отправить личное сообщение для Alexander3928 Посмотреть профиль Найти все сообщения от Alexander3928
 
Регистрация: 19.05.2021
Сообщений: 75

ksa,
voraa,

Можно узнать что я не так сделал?

function functeSt2() {
    const container = document.querySelector(".container");

    function html1() {
        const test2 = `
            <button>TEST2</button>
        `;
        container.innerHTML = test2;
        return container;
    }

    function html2() {
        const test3 = `
            <button>TEST3</button>
        `;
        container.innerHTML += test3;
        return container;
    }
}
Ответить с цитированием
  #9 (permalink)  
Старый 18.02.2022, 14:59
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от Alexander3928
что я не так сделал?
Тут больше вопрос к тебе... Что ты хотел таки сделать в той функции?
Ответить с цитированием
  #10 (permalink)  
Старый 18.02.2022, 15:08
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Alexander3928, вот тебе пример функции, которая возвращает строку с хтмл разметкой...
<div id='test'></div>
<script>
const o = document.querySelector('#test')
o.insertAdjacentHTML('afterBegin', html())

// Пример функции с разметкой html
function html() {
	return '<p>Test</p>'
}
</script>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызвать функцию с другого js файла dreamfactor Общие вопросы Javascript 0 13.06.2014 16:10
Как вызвать функцию при загрузке страницы? Yevgeniy Events/DOM/Window 1 30.01.2013 17:34
Как узнать размер загружаемого файла? shkarbatov Серверные языки и технологии 5 14.08.2011 17:12
Как по событию подгрузить код из другого файла? jelome Элементы интерфейса 2 30.06.2011 09:58
Нужно вызвать функцию из другого окна Destiny Общие вопросы Javascript 6 07.05.2008 01:32