onSubmit client script to prevent form submission

patricklatella
Mega Sage

hi all,

I have a javascript question.   I have an onSubmit catalog client script to prevent submission of a record producer if the user has not checked a box on the form.   This is working properly.   However I need this to only apply if another field on the form is set a certain way.   Right now here is my script:

function onSubmit() {
    if(g_form.getValue('ad_domain') == 'YES'){
    return true;
    }
    if(g_form.getValue(user_confirm') == 'false' ){
    alert('Please be sure to check the box before submitting a ticket.');
    return false;
   
  }
  }

this part is working properly:

  if(g_form.getValue(user_confirm') == 'false' ){

    alert('Please be sure to check the box before submitting a ticket.');

    return false;

but it's the first "if" part that I need to tweak, I only want the script to fire if the field on the form "ad_domain" is set to YES.   If this field is set to NO I don't want the script to fire.

how do I do this?   thanks!

1 ACCEPTED SOLUTION

While that solution works, it's not very user friendly. Why have them submit, then cancel and require them to click a checkbox. You should make their life easier...I'm not sure what this checkbox is, but you have several options:



1) This is the best user experience and what you should be doing... Create a UI policy ...under When to Apply...Add Filter Conition ad_domain = YES or ad_comain=YesB and question_choide = incorrect info. Leave Reverse if False...then Save. After it reloads go to UI Policy Actions, select new, add in the checkbox field and set Mandatory to true. This will pre-empt the user to check it prior to submission. to inform them after submission is the least desirable as it adds clicks...Submit -> Ok on alert -> check box -> Submit and hope you don't rinse repeat due to other onSubmits...



2) If you can't do that for some reason, then don't hate on your users and require them to check a box then have to resubmit... use a confirm and do it for them...


function onSubmit() {  


  if(g_form.getValue('ad_domain') == 'YES' || g_form.getValue('ad_domain') == 'YESb' && g_form.getValue('question_choice') == 'incorrect info' ) //assuming values are YES and YESb  


  {  


            if(g_form.getValue('user_confirm') == 'false' ){  


                  var result = confirm('Are you sure you wish to submit?');//or whatever that checkbox is for


                  if (result) {


                            g_form.setValue('checkbox', true);


                  else


                            return false;


            }  


 


  }  


}  



*edit: changed prompt to confirm*


View solution in original post

38 REPLIES 38

Andrew Wortham
Kilo Guru

Hey Patrick,



I just want to weigh in here and say that I wouldn't recommend forcing users to check a box.   There is usually a more productive way to achieve whatever the business need is.   Just about everything is possible in ServiceNow, but starting questions with the business need rather than the technical detail may be more productive.



If you have already nailed down your process, and decided that you definitely want a user to confirm an action by "checking a box" another option rather than writing code for a "true/false" field that you will have to maintain moving forward, would be to create a select box with a default value of none and only one option of "YES" and the question would be "have you performed X task"



By using a select box with "none/YES" rather than a check box, you could use OOB "mandatory" behavior, and then you could show field / hide field / make the field mandatory using the standard and easy to use Catalog UI policy interface.  



Best,


Andrew


patricklatella
Mega Sage

ok great, however I'm getting this alert first upon submission with the conditions being in place to fire the client script, which then does properly block the submission...but I get this first...where "CTSL" is my equivalent value to "YESb".   I don't want this message to popup



find_real_file.png


Thanks for the update Pat. Remove this line from your code.


alert(g_form.getValue('ad_domain'));


patricklatella
Mega Sage

Sanjiv I believe your code has an extra ) character after the 'YESb' in line 3.


It should still work.



Please mark this response as correct or helpful if it assisted you with your question.