Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Call javascript function inside a module from an html page [duplicate]

I have an HTML file and a JavaScript module. The JavaScript module exports a function, which I want to call in the HTML file.

index.html

<html>
<head>
  <script type="module" src="app.js"></script>
</head>
<body>
  <button onclick="greet()">Greetings from module</button>
</body>
</html>

index.js

function greet() {
  alert('Hello');
}

When Greetings from module button is clicked, the following error is thrown:

Uncaught ReferenceError: greet is not defined
    at onclick

Note: app.js has to be a marked as a module.

like image 977
M4trix Dev Avatar asked Sep 02 '25 17:09

M4trix Dev


2 Answers

First of all you have to explicitly export you function:

export function greet() {
  alert("Hello from module");
}

Secondly, a module has it's own scope (this is the whole point of modules) thus you need to add the function to the global scope. So, to do it you have to run a script which imports the function and adds it to the window object:

<script type="module">
  import { greet } from "./app.js";
  window.greetFromModule = greet;
</script>

Now you don't need this part <script type="module" src="app.js"></script>

Alternatively you can create an empty obj and add your modules stuff to it, this is what it would look like:

<html>
  <head></head>
  <body>
    <button onclick="greetFromHtml();">greetFromHtml</button>
    <button onclick="module.greet()">greetFromModule</button>
    <script type="text/javascript">
      function greetFromHtml() {
        alert("Hello");
      }
      const module = {};
    </script>
    <script type="module">
      import { greet } from "./app.js";
      module.greet = greet;
    </script>
  </body>
</html>
like image 53
mrdarkside Avatar answered Sep 05 '25 05:09

mrdarkside


myscript.js

export const sampleFunction=()=>{
alert("Hello I'm sample");

}

index.js

import {sampleFunction} from './myscript.js';
window.sampleFunction=sampleFunction;

index.html

<script type='module' src='./index.js'></script>
<button onclick="sampleFunction()">Click me</button>

In the script tag make script type = 'module' and src = './index.js'. Now it should be working.

like image 30
Ram Kishore Avatar answered Sep 05 '25 07:09

Ram Kishore