Page 1 of 1

Toggle read-only

Posted: 24 Jun 2015
by Devin McMahon
I have a form with a People Picker field called Participants, on the Edit Form I would like to keep this field read-only because I have People Picker configured to show Picture and Name, and having the person's picture is important to the process.

This all works fine when i set People Picker to read-only in properties, but I would also like the user to be able to open the People Picker field to add people if desired, and I would like to do this with a button, so when you click the button if the field is read-only = true it will switch to read-only= False and vice versa.

Following the example of how to dynamically disable / enable fields , I have been going through the iterations putting code OnClick like

If fd.field('Participants').readonly(true){

fd.field('Participants').readonly(false);

} else {

fd.field('Participants').readonly(true);

}

No matter what I do, i cannot get the field to toggle back and forth from read-only TRUE / FALSE.

Is this not possible?

Re: Toggle read-only

Posted: 25 Jun 2015
by rostislav
Please use the following code:

Code: Select all

fd.field('Participants').readonly((fd.field('Participants').readonly() == true) ? false :

Re: Toggle read-only

Posted: 25 Jun 2015
by Devin McMahon
The button does not appear to be firing. I added a button to the form and put the following code OnClick:


alert('OK');
If fd.field('Participants').readonly(true){

fd.field('Participants').readonly((fd.field('Participants').readonly() == false);

} else {

fd.field('Participants').readonly((fd.field('Participants').readonly() == true);

}


It is not even firing the alert..

Re: Toggle read-only

Posted: 25 Jun 2015
by Devin McMahon
I have played around a little with setting fields read-only = False for a couple of other non-People Picker fields, and these are plain text fields ...


I tried the On click event a couple of different ways

fd.field('Questions').readonly(false);

or

fd.Field('Questions').readonly((fd.Field('Questions').readonly() == false);

or

fd.Field('Questions').readonly() == false;


In all cases there is no effect on the Questions field on the form. Nothing is happening.


My syntax is sound according to dynamic form examples provided in the article as well as feedback provided here. I still cannot understand why i cannot manually "open" a field for editing with apparently well formed JS

Re: Toggle read-only

Posted: 26 Jun 2015
by rostislav
Regarding your second post: No, your syntax is not correct, that is why your code isn't being executed. To see what's wrong with it you can open console in the web browser (in Chrome it is F12) and open the console tab. Once you click your button any errors will be output there. In case with your code in the second post it is synctatically incorrect, there is no identifier 'If', it is 'if', there are places where brackets are missing, there are places where there are additional brackets and all of this causes errors. If you want a synctatically correct version of your code:

Code: Select all

if (fd.field('PeoplePicker').readonly(true)){
	fd.field('PeoplePicker').readonly(fd.field('PeoplePicker').readonly() == false);
} else {
fd.field('PeoplePicker').readonly(fd.field('PeoplePicker').readonly() == true);
}
I'm not sure what you're trying to do with it though. If you want to achieve what you described in your first post - use the code I posted above. Regarding you third post:

Code: Select all

fd.field('Questions').readonly(false);
will make the Questions field *not* readonly, if you want to make it readonly you have to pass true, not false, i.e.

Code: Select all

fd.field('Questions').readonly(true);
fd.Field('Questions').readonly((fd.Field('Questions').readonly() == false); 
there is no 'Field' identifier, it is 'field' same goes for

Code: Select all

fd.Field('Questions').readonly() == false;
Anyway, again, if you want to achieve what you described initially, remove all synctatically incorrect code from the onclick property and use the code we posted before. Also, if you want to experiment with javascript, you can do it interactively in the console, the way I described above.