Where should I put my Javascript code in a ColdFusion model glue view?

255 Views Asked by At

Let's say I have a ColdFusion Model Glue view called login.cfm. In it, I have a form:

<form id="loginForm" action="#event.linkTo("user.login")#" method="POST">
    E-mail: <input id="emailField" type="text" name="email">
    Password: <input id="passwordField" type="text" name="password">
    <input type="submit" value="Login">
</form>

Now I want to add in some Javascript validation for when the user clicks the Login button. Something like this in jQuery:

<script type="text/javascript">
    $(function() {
        $('#loginForm').submit(function() {
            // check that emailField is not empty and is a valid e-mail
            // check that passwordField is not empty
            // if validation fails, add in DOM elements to show error messages
        });
    });
</script>

Where should I be adding this Javascript code? Do I stick it directly into the login.cfm view? Or is there a better way of handling this? Preferably, I'd like to stick my Javascript code from all my views to the bottom of the body.

2

There are 2 best solutions below

6
On BEST ANSWER

There are a quite a few different strategies for this. The easiest is it put your view-specific script in a single .js file and include it through a <script src="path"></script> tag just before closing the <body> tag.

You can also look at libraries such as require.js that allow you to asynchronously load script files and their dependencies.

0
On

You could just leave that in the view file the way it is.

I am not a big fan of having <script> blocks all over the place though, so I typically will use <cfsavecontent> and <cfhtmlhead> to make sure all these blocks of JS wind up in the <head>

You could do this right in the login.cfm file.

<cfsavecontent variable="js">
<script type="text/javascript">
    $(function() {
        $('#loginForm').submit(function() {
            // check that emailField is not empty and is a valid e-mail
            // check that passwordField is not empty
            // if validation fails, add in DOM elements to show error messages
        });
    });
</script>
</cfsavecontent>
<cfhtmlhead text="#js#" />