21

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?

0

3 Answers 3

23

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

Sign up to request clarification or add additional context in comments.

Comments

11

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

Comments

4

in your coffeescrpt code, try to save the function to window: window["show_alert"] = show_alert

3 Comments

jftr i think root = exports ? this; root.show_alert = show_alert is better instead of directly accessing window. See stackoverflow.com/a/4215132/832273 for details
@mru javascript is always extremely confusing to me. Is there a specific reference site or text either of you would recommend?
@KurtRudolph depends on what you are looking for but have a look at developer.mozilla.org/en/JavaScript

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.