1

I use the new class syntax for JS. When I press a button, I want to call a method from a class. To archieve this, I set this method static.

class NoteController { // The controller class
    constructor() { // Initialization
        // ...
    }

    static CreateNote() { // The method to call - static
        // ....
    }
}




<!DOCTYPE html>
<html>

<head>

    // ....
    <script src="NoteController.js"></script> // Link the js file to the html file

</head>

<body>

    // ....
    <button type="button" id="btnCreateNote" onclick="NoteController.CreateNote()">Create</button> // call the method

</body>

</html>

When I click the button, it says, NoteController is not defined. I really do not get, what is wrong there.

A picture of my project folder:

enter image description here

Maybe this helps.

peterHasemann
  • 1,550
  • 4
  • 24
  • 56

3 Answers3

2

EDIT: Correction to make it static:

<script>
class NoteController { // The controller class
    constructor() { // Initialization
        // ...
        alert('constructor called');
    }

    static CreateNote() { // The method to call - static
        // ....
        alert('create note');
    }
}
//var nc=new NoteController();
//console.log(nc);
</script>


<button type="button" id="btnCreateNote" onclick="NoteController.CreateNote()">Create</button> // call the method

JSFiddle

This is the working example of your code:

<script>
class NoteController { // The controller class
    constructor() { // Initialization
        // ...
        alert('constructor called');
    }

    CreateNote() { // The method to call - static
        // ....
        alert('create note');
    }
}
var nc=new NoteController();
console.log(nc);
</script>


<button type="button" id="btnCreateNote" onclick="nc.CreateNote()">Create</button> // call the method

Working JSFiddle

ProgrammerV5
  • 1,915
  • 2
  • 12
  • 22
  • The method should be static, called without an instance of the NoteController. – Leonardo Chaia Apr 05 '17 at 12:44
  • My bad, added a new example with static method. – ProgrammerV5 Apr 05 '17 at 12:47
  • I was testing the same thing, but if you move the JS code to the JS area in jsfiddle, it stops working, not sure why. Check [this fiddle](https://jsfiddle.net/69b06hvj) – Leonardo Chaia Apr 05 '17 at 12:49
  • If you use this syntax, even if it is on a different file, it works fine, test it locally. (take a look at the change in the JAVASCRIPT settings) https://jsfiddle.net/69b06hvj/3/ – ProgrammerV5 Apr 05 '17 at 13:10
  • Ha, scope issues. Jsfiddle is (by default) wrapping the JS tab in an `onload` function. By setting the 'no-wrap' load type it works. So the OP issue must be regarding how the js file is being loaded. – Leonardo Chaia Apr 05 '17 at 13:12
1

Since lack of information about NoteController.js,I assume that your NoteController.js has below code.

    function NoteController()
    {
    //variables
    //sub functions
   function CreateNote()
     {
      //code
     }
    }

So now you need to create the object of the function and call it.

<script src="NoteController.js"></script>
<script>
var _noteController=new NoteController();
</script>

<body>
    <button type="button" id="btnCreateNote" 
onclick="_noteController.CreateNote()">Create</button> 
</body>
Hameed Syed
  • 3,939
  • 2
  • 21
  • 31
1

Include your class inside the <script> tags, So that the browser will identify the javascript code and execute it!

VinoPravin
  • 947
  • 3
  • 17
  • 32