This topic is locked

Dynamically make fields readonly based on value from another field

2/3/2017 9:22:05 PM
PHPRunner General questions
P
peleflores author

Hi
Greetings from the Philippines

Thank you for accepting me to the forum.
I would like to ask help how can I make two (2) fields (Mid_Grade) (Fin_Grade) to dynamically change to read-only

based on a value of another field (Posted). The condition is:
If posted = Y, then Mid_Grade and Fin_Grade fields are set to read only.

If posted = N, then Mid_Grade and Fin_Grade fields are set to write.
Attached is a screenshot of the app Im working on. See link below.

Screenshot of the app
The event codes of the edit page
Process Record Values
Before Display
Thanks in advance for assistance
Pele

romaldus 2/3/2017

The easiest way is using javascript onload event

admin 2/3/2017

Use Javascript OnLoad event and makeReadonly() function:

https://xlinesoft.com/phprunner/docs/makereadonly.htm
Use this technique to pass data from BeforeDisplay event to Javascript OnLoad event:

https://xlinesoft.com/phprunner/docs/how_to_pass_values_from_php.htm

P
peleflores author 2/4/2017



Use Javascript OnLoad event and makeReadonly() function:

https://xlinesoft.com/phprunner/docs/makereadonly.htm
Use this technique to pass data from BeforeDisplay event to Javascript OnLoad event:

https://xlinesoft.com/phprunner/docs/how_to_pass_values_from_php.htm


Hi Sergey
My programming skills is not that sharp here is my code for Before Display Event:
$pageObject->setProxyValue("postedvalue", $pageObject->getMasterRecord());
Code for Javascript On Load Event:
{

var ctrl = Runner.getControl(pageid, 'posted');

var mg = Runner.getControl(pageid, 'mid_grade');

var fg = Runner.getControl(pageid, 'fin_grade');

var wg = Runner.getControl(pageid, 'web_grade');

if

( alert(proxy.postedvalue!='Y'));

ctrl.makeReadonly();

mg.makeReadonly();

fg.makeReadonly();

wg.makeReadonly();

}
Seems all fields are readonly if I use the codes above.

P
peleflores author 2/4/2017



Hi Sergey
My programming skills is not that sharp here is my code for Before Display Event:
$pageObject->setProxyValue("postedvalue", $pageObject->getMasterRecord());
Code for Javascript On Load Event:
{

var ctrl = Runner.getControl(pageid, 'posted');

var mg = Runner.getControl(pageid, 'mid_grade');

var fg = Runner.getControl(pageid, 'fin_grade');

var wg = Runner.getControl(pageid, 'web_grade');

if

( alert(proxy.postedvalue!='Y'));

ctrl.makeReadonly();

mg.makeReadonly();

fg.makeReadonly();

wg.makeReadonly();

}
Seems all fields are readonly even if with field value "N".

P
peleflores author 2/4/2017





Am not sure, its best approach to use. Your comments and suggestions are welcome.
My new code for Javascript Onload Event:
var ctrl=Runner.getControl(pageid, 'posted');

var mg = Runner.getControl(pageid, 'mid_grade');

var fg = Runner.getControl(pageid, 'fin_grade');

var wg = Runner.getControl(pageid, 'web_grade');
if (ctrl.getValue()=='Y');
ctrl.makeReadonly();

mg.makeReadonly();

fg.makeReadonly();

wg.makeReadonly();
if (ctrl.getValue()=='N');

ctrl.makeReadWrite();

mg.makeReadWrite();

fg.makeReadWrite();

wg.makeReadWrite();
Thanks

Pele

romaldus 2/4/2017

Correct syntax:

var ctrlPosted = Runner.getControl(pageid, 'posted');

var ctrlMidGrade = Runner.getControl(pageid, 'Mid_Grade');

var ctrlFinGrade = Runner.getControl(pageid, 'Fin_Grade');
if (ctrlPosted.getValue()=='Y')
{

ctrlMidGrade.makeReadonly();

ctrlFinGrade.makeReadonly();

}


Remember that javascript is case sensitive. Make sure you type pageid correctly

For example your database fiield name is The correct syntax is:
var ctrlMidGrade = Runner.getControl(pageid, '[b]Mid_Grade
');
Not:

var ctrlMidGrade = Runner.getControl(pageid, '[color="#ff0000"]mid_grade');
or

var ctrlMidGrade = Runner.getControl(pageid, 'Mid_grade');****

P
peleflores author 2/5/2017



Correct syntax:

var ctrlPosted = Runner.getControl(pageid, 'posted');

var ctrlMidGrade = Runner.getControl(pageid, 'Mid_Grade');

var ctrlFinGrade = Runner.getControl(pageid, 'Fin_Grade');
if (ctrlPosted.getValue()=='Y')
{

ctrlMidGrade.makeReadonly();

ctrlFinGrade.makeReadonly();

}


Remember than javascript is case sensitive. Make sure you type pageid correctly

For example your database fiield name is The correct syntax is:
var ctrlMidGrade = Runner.getControl(pageid, '[b]Mid_Grade
');
Not:

var ctrlMidGrade = Runner.getControl(pageid, '[color="#ff0000"]mid_grade');
or

var ctrlMidGrade = Runner.getControl(pageid, 'Mid_grade');****


Thanks Romaldus for pointing the error. It worked perfectly.
Best regards,
Pele