javascriptformscoldfusioncfformcfinput

Onclick function not working with CFINPUT validation


I am trying to validate the fields using CFINPUT and then calls a popup window function to do more stuff BEFORE submitting the form but it's not working. The onclick function seems to take precedent over the CFINPUT validation. As soon as I click on the Submit button it's calling the popup window function first without validating the fields. I need it to:

  1. first validate the fields
  2. call the popup function
  3. then submit the form after the popup closes itself

(p.s. I see other similar case on here but there is no answer given)

The code looks like this:

    <cfform action="register.cfm" method="post">
        <cfinput type="text" name="username" size="50" maxlength="100" required="yes" autofocus="on" validate="noblanks">
        <cfinput type="text" name="address" size="50" maxlength="100" required="yes" validate="noblanks">
....
         <input type="submit" value=" Send " onclick="popup()">
....

Please help. Thank you.


Solution

  • This is an old blog posting so not sure how accurate things are today but it shows how you can run the CFFORM validation via the _CF_checkTaskForm() function. So it seems like if you change the submitting of the form to a button via <input type="button" value="Send" onclick="popup(this.form)" /> then change the popup function to first validate the form via the _CF_checkTaskForm() and if that passes to proceed with the other JS you are doing.

    http://www.neiland.net/blog/article/triggering-cfform-validation-when-using-ajax/

    To expand on that, I just looked at a CF8 and CF11 installations and looks like the function in those is _CF_checkCFForm_1 if using that version of CF then something like this should get you in the correct direction:

    <script>
        popup = function(formreference) {
            var check = _CF_checkCFForm_1(formreference);
    
          if (!check) {
                //if the rules failed then do not submit the form
               return false;
          } else { 
                // Do the popup
          }
        }
    </script>
    
    <cfform action="register.cfm" method="post">
            <cfinput type="text" name="username" size="50" maxlength="100" required="yes" autofocus="on" validate="noblanks">
            <cfinput type="text" name="address" size="50" maxlength="100" required="yes" validate="noblanks">
             <input type="button" value=" Send " onclick="popup(this.form)" />
    </cfform>