How to make date picket as read only in UI page

ramesh_r
Mega Sage

Hi Team,

 

When clicking on the UI action the is one pop-up page will open(UI page). and I need to make read-only for some scenarios, for that, I am using the below line. it's making the date field read only but still, the date picker is enable

I want to make read-only both date picker and date place.. Please help to resolve this

document.getElementById('date').setAttribute('readonly', 'readonly').

 

 

   <div id="ignore_date" class="is-required" style="visibility:hidden">
						<div class="col-sm-4 control-label"><span class="required-marker"></span>$[if(onlyFalsePositive == 'true'){gs.getMessage("Ignore detection until");}else{gs.getMessage("Until");}]</div>
                        <div class="col-sm-5 date-control">
                           <g:ui_date name="date" id="date" class="form-control" style="resize:none" />
                            <div id="until_date_error_messages" style="display:none;" >
                                <div class="outputmsg_div"></div>
                            </div>
                        </div>
                    </div>
                </div>

 find_real_file.png

1 ACCEPTED SOLUTION

-O-
Kilo Patron
Kilo Patron

Add the following as "Client script" on the UI Page record:

function u_setUIDateReadOnly (name, readOnly) {
	return readOnly ? u_enableUIDate(name) : u_disableUIDate(name);
}

function u_enableUIDate (name) {
	return jQuery(document.getElementsByName(name))
		.attr('readonly', 'readonly')
		.nextAll('.input-group-btn')
		.find('a')
		.attr('disabled', 'disabled');
}

function u_disableUIDate (name) {
	return jQuery(document.getElementsByName(name))
		.removeAttr('readonly', 'readonly')
		.nextAll('.input-group-btn')
		.find('a')
		.removeAttr('disabled', 'disabled');
}

Then you can call

u_setUIDateReadOnly('name', true);

to make the control read-only (completely), or you can call

u_setUIDateReadOnly('name', false);

to make it read-write again.

To start the page with it read-only, you would add to the UI Page HTML:

	<script type="text/javascript">
		addRenderEvent(u_disableUIDate);

		function u_disableUIDate() {
			console.log(u_setUIDateReadOnly('date', true));
		}
	</script>

Of course you might want to replace the hard coded name 'date' with Jelly variables.

Also it would be nice to also mark the field as not-mandatory when setting it to be read-only, to avoid confusion and user frustration. You could create the necessary functions using the provided ones as template.

View solution in original post

3 REPLIES 3

Community Alums
Not applicable

Hi @ramesh.r ,

Here is a similar question should help you :https://community.servicenow.com/community?id=community_question&sys_id=bcb50321db1cdbc01dcaf3231f96...

Mark my answer correct & Helpful, if Applicable.

Thanks,
Sandeep

Ankur Bawiskar
Tera Patron
Tera Patron

Hi,

why not hide that date picker box if you want to make it readonly using DOM manipulation?

Regards
Ankur

Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 9x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

-O-
Kilo Patron
Kilo Patron

Add the following as "Client script" on the UI Page record:

function u_setUIDateReadOnly (name, readOnly) {
	return readOnly ? u_enableUIDate(name) : u_disableUIDate(name);
}

function u_enableUIDate (name) {
	return jQuery(document.getElementsByName(name))
		.attr('readonly', 'readonly')
		.nextAll('.input-group-btn')
		.find('a')
		.attr('disabled', 'disabled');
}

function u_disableUIDate (name) {
	return jQuery(document.getElementsByName(name))
		.removeAttr('readonly', 'readonly')
		.nextAll('.input-group-btn')
		.find('a')
		.removeAttr('disabled', 'disabled');
}

Then you can call

u_setUIDateReadOnly('name', true);

to make the control read-only (completely), or you can call

u_setUIDateReadOnly('name', false);

to make it read-write again.

To start the page with it read-only, you would add to the UI Page HTML:

	<script type="text/javascript">
		addRenderEvent(u_disableUIDate);

		function u_disableUIDate() {
			console.log(u_setUIDateReadOnly('date', true));
		}
	</script>

Of course you might want to replace the hard coded name 'date' with Jelly variables.

Also it would be nice to also mark the field as not-mandatory when setting it to be read-only, to avoid confusion and user frustration. You could create the necessary functions using the provided ones as template.