Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Detect checkbox clicked

brycefraser
Giga Contributor

Hey all

I have a catalogue form with a large list of checkboxes.

I'd like to know how to detect which checkbox has been clicked by a requestor so I can apply a style to differentiate it from the checkboxes that are auto-filled.

I've no idea where to start.


Anyone got any ideas?

Thanks!

1 ACCEPTED SOLUTION

Hi Bryce, you were right! Here goes the fix. Add the following at the beginning of your inline defined onclick function (@ line 12)



gel('IO:' + item.sys_id).value = this.checked;if (typeof(variableOnChange) == 'function') variableOnChange('IO:' + item.sys_id);




I'll appreciate if you can mark this post as the correct one or as a helpful one so that others reading this post in the future know that this line is *key* to be added in the inline defined onclick function.




Thanks,


Berny


View solution in original post

23 REPLIES 23

Sorry for hassling you so much Berny.


I still can't seem to get it to work.



Here is the script I am currently running:



function onLoad() {  


    //Type appropriate comment here, and begin script below  




  var target = new GlideRecord('item_option_new');  


  target.addQuery('variable_set', '2d18189c288e4200582e4db8471a13ab');  


  target.query();  


  while (target.next()){  


            if (target.type == '7'){


                      var item_sysid = target.sys_id;


                                gel('ni.IO:' + item_sysid).onclick = function() {


                                          gel('IO:' + item_sysid).value = this.checked;


                                          if (typeof(variableOnChange) == 'function') variableOnChange('IO:' + item_sysid);




                                          // get sys id from io object



                                          var nam = this.name.split(":");


                                          var nam = nam[1];



                                          // get name from sys id


                                          var fieldtarget = new GlideRecord('item_option_new');


                                          fieldtarget.addQuery('sys_id',nam);


                                          fieldtarget.query();


                                          while (fieldtarget.next()){


                                                    var targetname = fieldtarget.name;


                                          }



                                          if (this.checked == true){


                                                    g_form.getControl(targetname).parentNode.style.color = 'red';


                                                    g_form.getControl(targetname).parentNode.style.fontWeight = 'bold';




                                          } else{


                                                    g_form.getControl(targetname).parentNode.style.color = 'black';


                                                    g_form.getControl(targetname).parentNode.style.fontWeight = 'normal';



                                          };




                      };  


            };  


  };


}










Hi Bryce, no worries! We're here to help.



Here goes a couple of recommendations:


a) In line 6, you may want to add a   target.addQuery('cat_item', sys_id_of_your_catalog_item);


b) Your could add another addQuery so that it will only retrieve the checkboxes. Something like target.addQuery('type', '7');


c) I'll probably comment out lines 16 through 38 and make sure that the rest of the code is working as expected.


d) lines 38, 42 and 43 do not need a ; -- all of these should only have a } -- without a ;



Thanks,


Berny


I hope this is helpful!


Thanks Berny,



Going through these steps now. I'll let you know once I sort it out.




Thanks again!


Great. Looking forward to hear if it worked