Как вызвать метод объекта javascript из HTML

У меня есть следующий класс:

export default class Cursor {
    currentMode = modes.highlight
    //methods to modify currentMode
    toggleSelector = () => {
        this.currentMode = modes.selector
    }

который я затем импортирую и создаю в своем файле Index.js:

import Cursor from './state.js'
const cursor = new Cursor(null)

Затем я загружаю index.js в свой файл index.html через:

<script type = "module"src = "./js/index.js"></script>

Но когда я пытаюсь использовать метод объекта, как показано ниже:

<li><a class = "btn-floating green" onClick='cursor.toggleSelector()'><i class = "material-icons">done</i></a></li>

У меня есть следующая ошибка:

cursor not defined

Есть ли способ исправить это?

Редактировать:

Я сделал это в соответствии с рекомендациями, но все еще не работает:

<script type = "module" src = "./js/index.js">import {cursor} from "./js/index.js";</script>

Но все еще имея это:

(index):27 Uncaught ReferenceError: cursor is not defined
at HTMLAnchorElement.onclick ((index):27)

Вы загружаете свой файл index.js внизу html? Если да, пожалуйста, переместите это в раздел тела

Vimal Patel 19.12.2020 14:41

type = "module"src = "./js/index.js" не могли бы вы здесь сделать сначала пробел между двумя атрибутами и попробовать еще раз?

lortschi 19.12.2020 14:45

Привет, @VimalPatel, да, это было внизу, я переместил его на тег body, но все равно не работает

noobmaster64 19.12.2020 14:49

@lortschi да, я сделал это, кажется, все еще не работает

noobmaster64 19.12.2020 14:49

Отвечает ли это на ваш вопрос? Модули ES6: неопределенная функция onclick после импорта

goto 19.12.2020 14:50

Вот как область видимости работает с модулями ES6.

goto 19.12.2020 14:51

@goto1 goto1 хм, я пробовал это, но, похоже, все еще не работает

noobmaster64 19.12.2020 14:56

@DionNeo вы сделали это неправильно - вернитесь к этому ответу и попробуйте еще раз. Вы никуда не экспортируете cursor, поэтому вы не можете его импортировать.

goto 19.12.2020 14:56

И вы не вносите все изменения, которые они предлагают.

goto 19.12.2020 15:00

Попробуйте установить класс следующим образом: const class Cursor { ... } и отделите в последней строке: export default Cursor;

lortschi 19.12.2020 15:03

@ goto1 Я внес изменения, которые они предложили, но здесь это не отражено, и я не думаю, что то, что они предложили, решило проблему. В любом случае спасибо, это сработало, когда я объявил его глобальным var

noobmaster64 19.12.2020 15:03

@lortschi const class Cursor { ... } определенно недопустимый синтаксис...

goto 19.12.2020 15:04

сори без константы :)

lortschi 19.12.2020 15:05

Опять же, проблема не в этом, проблема в том, что все объявления внутри модуля относятся к этому модулю, посмотрите ответ, который я привел выше, для правильного решения и объяснения.

goto 19.12.2020 15:08

не уверен, что это действительно так, но удаление type = "module" может сработать

Shrikantha Budya 19.12.2020 15:32
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
15
180
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы пытаетесь вызвать onClick='cursor.toggleSelector()' , объект курсора должен присутствовать в области видимости объекта Window.
Объем модуля, в котором определен курсор, отличается.

попробуйте что-то подобное в index.js, должно сработать.
По сути, это присвоение курсора объекту Window, что позволяет вызывать из элемента HTMLAnchor.

import Cursor from './state.js'
const cursor = new Cursor(null);
window.cursor = cursor;

Другие вопросы по теме