Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   как исправить ошибку? (https://javascript.ru/forum/misc/82785-kak-ispravit-oshibku.html)

prototip 05.07.2021 12:57

как исправить ошибку?
 
Ребята, подскажите в браузере выдает ошибку, почему и как исправить? Uncaught ReferenceError: show is not defined
at HTMLInputElement.onchange (index.html?_ijt=1e2q4b7rp7qa280js6hpf45j5c&_ij_re load:17)
на эту строку:
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>file</title>
</head>
<body>
<div class="file-read">
    <div class="file-input">
        <label class="custom-file-upload">
            <input type="file" id="file" onchange="show(this)" accept=".txt, .pdf, .epub, .fb2">
            Upload a file
        </label>
    </div>

    <a href="">Reset</a>

</div>

<div id="table-div">
    <table id="out"></table>
</div>
</body>
</html>


import * as _ from 'lodash';

function show(input) {
  const file = input.files[0];

  const reader = new FileReader();
  reader.readAsText(file, 'UTF-8');
  reader.onload = () => {
    const res = _.words(reader.result, /[а-яА-ЯёЁa-zA-Z]{4,}/gim);
    const result = _.flow([
      _.countBy,
      _.toPairs,
      _.partial(_.orderBy, _, 1, 'desc'),
      _.partial(_.take, _, 10),
    ]);

    const txt = result(res).map(([word, num]) => `<tr><td>${word}<td>${num}`).join('');
    const out = document.getElementById('out');
    out.insertAdjacentHTML('beforeend', txt);
  };
}

Aetae 05.07.2021 13:34

Смотря на require можно предположить, что вы используете модули. Модули на то и модули, что они изолированы, и функция show существует только внутри конкретного модуля. Чтобы использовать функцию show где-то ещё, надо во-первых: её экспортировать из этого модули, во-вторых: импортировать в месте использования.

Ну или таки разместить её глобально:
window.show = function show ...

prototip 06.07.2021 17:29

Aetae,
Цитата:

Чтобы использовать функцию show где-то ещё, надо во-первых: её экспортировать из этого модули, во-вторых: импортировать в месте использования.
у меня только 2 файла html и js. Если в html создать тег script и перенести код из файла js, то функция определяется и все ок, но если этот скрипт вынести во внешний файл, то функция перестает определяться. Если сделать так как вы говорите, экспортировать эту функцию, а импортировать ее куда необходимо? в html?

Aetae 06.07.2021 19:44

Всё равно после импорта её надо будет задать глобально для использования в onclick.

Правильный подход - не использовать onclick в html, а давать элементу класс или id, и уж по нему назначать обработчики в коде через addEventListener.


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