I have the following coffeescript code to generate and alert box:
show_alert = () ->
alert("Hello! I am an alert box!")
which compiles to:
(function() {
var show_alert;
show_alert = function() {
return alert("Hello! I am an alert box!");
};
}).call(this);
in my html I have the following
<input onclick='show_alert()' type='button' value='Show alert box' />
However, no alert box shows? The following is the html copied from the browser:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Test Rails Application</title>
<style type='text/css'>.application h1 {
color: lime; }
</style>
<script type='text/javascript'>(function() {
var show_alert;
show_alert = function() {
return alert("Hello! I am an alert box!");
};
}).call(this);
</script>
</head>
<body>
<h1>Hello from applicaiton.html.haml</h1>
<div class='application'><h1>Hello World</h1>
<input onclick='show_alert()' type='button' value='Show alert box' />
</div>
</body>
</html>
Why am I not able to get an alert box to show up?
You can simply invoke a function by placing parenthesis after its name as shown in the following example. // Generated by CoffeeScript 1.10. 0 (function() { var add; add = function() { var a, b, c; a = 20; b = 30; c = a + b; return console. log("Sum of the two numbers is: " + c); }; add(); }).
How to Define a Function. To create a function you define its name, any values ("arguments"), and some statements: function myfunction(argument1,argument2,etc) { some statements } A function with no arguments must include the parentheses: function myfunction() { some statements }
As of today, January 2020, CoffeeScript is completely dead on the market (though the GitHub repository is still kind of alive).
Your problem is that the generated javascript code is in another scope. You have to solve this
by either adding the -b
parameter to the coffeescript compiler or export your function
explicitly via
root = exports ? this
root.show_alert = () -> alert("Hello! I am an alert box!")
For more information about the exporting and scope issue have a look at https://stackoverflow.com/a/4215132/832273
I created a working jsfiddle with the above coffeescript code
I found two ways to solve this issue FIRST add @ before function name
@say_hi = () ->
$(alert('Hello!!!'))
SECOND at the end of coffee file add
window["say_hi"] = say_hi
in your coffeescrpt code, try to save the function to window: window["show_alert"] = show_alert
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With