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.

Make checkbox disabled based on case's state value

Prity Shaw
Tera Contributor

I created a custom widget to show cases in list view with checkboxes. I want to make the respective checkbox enabled only if the case is in 'Open' status otherwise it should be disabled
I can fetch the state value in HTML using {{::item.state}} but conditions not working as expected.

Test 1:
In this scenario the disabled= "c.isOpen({{::item.state}})" always set to true and the c.isOpen(state) function is not even getting called. So, all the checkboxes is disabled irrespective of the state.

HTML:


<table ng-if="data.items.length" class="grid-table"  class="tableContent">
  <thead>
          <tr>
    <th>Action</th>
            <th ng-repeat="field in ::data.header">{{field}}</th>
  </tr>
        </thead>
<tr ng-repeat="item in data.cases.list">
<td>
<input type='checkbox' id = {{item.check}} name = {{item.check}} checklist-model="test" checklist-value='' ng-click="c.selectedList(item)" disabled= "c.isOpen({{::item.state}})"/>
    </td>
 <td role="cell" ng-repeat="field in ::data.row">{{item[field]}}</td>
</tr>
</table>


Client script :
c.isOpen = function(state){
alert('inside isOpen func');
if(state == 'Open'){
return false;
}
return true;
};

Test scenario 2:
The checkboxes are completely getting hidden and not visinle at all irrespective of the state.

HTML :



<table ng-if="data.items.length" class="grid-table"  class="tableContent">
  <thead>
          <tr>
    <th>Action</th>
            <th ng-repeat="field in ::data.header">{{field}}</th>
  </tr>
        </thead>
<tr ng-repeat="item in data.cases.list">
<td>

<span ng-if={{::item.state}}>

<input type='checkbox' id = {{item.check}} name = {{item.check}} checklist-model="test" checklist-value='' ng-click="c.selectedList(item)"/>

</span>
    </td>
 <td role="cell" ng-repeat="field in ::data.row">{{item[field]}}</td>
</tr>
</table>


I attached the snapshots of portal for both of the scenarios for reference. Please guide what conditions i should put so the checkboxes for resolved cases will be disables and the open cases checkboxes are enabled.

3 REPLIES 3

Mohith Devatte
Tera Sage
Tera Sage

Hello @Prity Shaw ,

You can do one thing try the below code by using document by get element by ID

c.isOpen = function(state){
alert('inside isOpen func');
if(state == 'Open'){
document.getElementById('your_checkbox_tag_id').checked=true;
}
else
{
document.getElementById('your_checkbox_tag_id').checked=false
}
};

Hope this helps 

mark my answer correct if it helps you

Hi Mohith,

Thanks for your response!

I tried this. But the c.isOpen() function is not even getting called and the alert in line no 2 is not getting printed.

Just confused if I should change some syntax in HTML so the function gets called.

<table ng-if="data.items.length" class="grid-table"  class="tableContent">
  <thead>
          <tr>
    <th>Action</th>
            <th ng-repeat="field in ::data.header">{{field}}</th>
  </tr>
        </thead>
<tr ng-repeat="item in data.cases.list">
<td>
<input type='checkbox' id = {{item.check}} name = {{item.check}} checklist-model="test" checklist-value='' ng-click="c.selectedList(item)" disabled= "c.isOpen({{::item.state}})"/>
    </td>
 <td role="cell" ng-repeat="field in ::data.row">{{item[field]}}</td>
</tr>
</table>

Regards,

Prity

Prity Shaw
Tera Contributor

Hi Mohith,

Thanks for your response!

I tried this. But the c.isOpen() function is not even getting called and the alert in line no 2 is not getting printed.

Just confused if I should change some syntax in HTML so the function gets called.

<table ng-if="data.items.length" class="grid-table"  class="tableContent">
  <thead>
          <tr>
    <th>Action</th>
            <th ng-repeat="field in ::data.header">{{field}}</th>
  </tr>
        </thead>
<tr ng-repeat="item in data.cases.list">
<td>
<input type='checkbox' id = {{item.check}} name = {{item.check}} checklist-model="test" checklist-value='' ng-click="c.selectedList(item)" disabled= "c.isOpen({{::item.state}})"/>
    </td>
 <td role="cell" ng-repeat="field in ::data.row">{{item[field]}}</td>
</tr>
</table>

Regards,

Prity