Checkbox in UI page

Hulk1
Giga Contributor

This code working fine if the number of checkboxes is 2 or 3. If the number of checkboxes is 10 or 15 then how to simplify this code? Because if the number of checkboxes is high then the combinations are also getting high. The code contains lot of if else statements. Its not looking good. How to simplify this code?

If you have any doubt in this question you can refer this

https://community.servicenow.com/community?id=community_question&sys_id=01bd45f31b6d2450ed6c9979b04bcb6a

HTML Script

<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
<g:evaluate var="jvar_gr" object="true" jelly="true"> 
	var trueval;
	var falseval;
	var gr = new GlideRecord('sys_user');
	trueval = jelly.sysparm_true;
	falseval = jelly.sysparm_false;	
	if(trueval == 'true' &amp;&amp; falseval === undefined) {
	   gr.addQuery("active",trueval);
	} else if(trueval === undefined &amp;&amp; falseval == 'true') {
	   gr.addQuery("active",false);
	}	
gr.query();	
gr;
</g:evaluate>
<div class="col-md-12 row">
<div class="col-md-10">
<table border="1">
 <tr>
   <th>Userid</th>
   <th>Id</th>
   <th>Title</th>
   <th>Completed</th>
 </tr>
 <g:for_each_record file="${gr}">
 <tr>
   <td>${gr.getValue("username")}</td>
   <td>${gr.getValue("sys_id")}</td>
   <td>${gr.getValue("first_name")}</td>
   <td>${gr.getValue("active")}</td>
 </tr>
	 </g:for_each_record>
	</table>
</div>
<div class="col-md-2">
 <input type="checkbox" name="true" id="true" value="${sysparm_true}" onclick="filterchange('true')"/> True
 <input type="checkbox" name="false" id="false" value="${sysparm_false}" onclick="filterchange('false')"/> False
</div>
</div>
</j:jelly>

Client Script

//fetch the values from the URL and set the respective checkboxes to true or false 
var trueval = getParmVal('sysparm_true');
var falseval = getParmVal('sysparm_false');
if (trueval !== undefined && falseval !== undefined) {
    if (trueval == 'true' && falseval == 'true') {
        gel("true").checked = true;
        gel("false").checked = true;
    }
} else if (trueval == 'true' && falseval === undefined) {
    gel("true").checked = true;
    gel("false").checked = false;
} else if (trueval === undefined && falseval == 'true') {
    gel("true").checked = false;
    gel("false").checked = true;
}

//This function is used to read the parameter values.
function getParmVal(name) {
    var url = document.URL.parseQuery();
    if (url[name]) {
        return decodeURI(url[name]);
    } else {
        return;
    }
}

function filterchange(val) {
    var truevalue = gel("true").checked;
    var falsevalue = gel("false").checked;
    //when checked pass the respective value to filter the data.
    if (truevalue && falsevalue) {
        g_navigation.open("?sysparm_true=true&sysparm_false=true");
        gel("true").checked = true;
        gel("false").checked = true;
    } else if (truevalue && !falsevalue) {
        g_navigation.open("?sysparm_true=true");
        gel("true").checked = true;
        gel("false").checked = false;
    } else if (!truevalue && falsevalue) {
        g_navigation.open("?sysparm_false=true");
        gel("true").checked = false;
        gel("false").checked = true;
    } else {
        g_navigation.open("?sysparm_true=true&sysparm_false=true");
        gel("true").checked = false;
        gel("false").checked = false;
    }
}
2 REPLIES 2

Dan Cigrang
Tera Expert

Could you use a `<select multiple></select>`?

 

<select multiple>
        <option value="checkbox1">checkbox 1</option>
        <option value="checkbox 2">checkbox 2</option>
        <option value="checkbox 3">checkbox 3</option>
        <option value="checkbox 4">checkbox 4</option>
    </select>

But when i click the first checkbox, the data fetching from table and the page reloaded. Any idea for this scenario?