dgraves
Scholar

Hide control based on multiple conditions with "OR"

Jump to solution

Sorry if this has been asked before. I read through at least fifteen different posts and have not found anything that works for me. I'm sure it's super simple and I'm just not getting it. I am using responsive forms (on-premise). I have a single line textbox control named "Part#". I want to hide this control based on two other controls. But it needs to be an "or" statement. I only want to show the Part# field if the Cost is less than "4900" OR if Classification (choice field) is equal to "Classified". 

 

I applied a rule to the control and have tried the rule to hide with the following functions with no luck: 

  • Classification!="Classified" || Cost<"4900"
  • or(Classification!="Classified",Cost<"4900")
  • not(or(Classification=="Classified",Cost>"4900"))

 

And oddly enough some of these rules ended up acting like an && because if I selected the Classified choice and put a cost of 5000 then the field was revealed but not if I did just Classified or just 5000, it stays hidden. For testing, I added the Calculated value to reveal the value of my choice field in the case the Classified wasn't the actual value, thinking it might be a numerical value but it appeared in the value field as Classified. 

0 Kudos
Reply
3 Replies
MegaJerk
Collaborator

Re: Hide control based on multiple conditions with "OR"

Jump to solution

Using your criteria for when you want the panel to show: 

 

  • Cost < 4900
  • Classification === "Classified"

 

Because rules are applied when the condition evaluated returns true we *could* use the following rule code to do that.

 

Classification !== "Classified" || Cost >= 4900

 

 

However due to the nature of how OR statements are evaluated, the above statement can return true (which will hide the control) even if the first portion (Classification !== "Classified") is false.

 

Example

 

Upon opening the form, the Part# Control is hidden. Classification !== "Classified", and because of that, the first part of our OR statement returns true, so the rule hides it.

MegaJerk_0-1646292853178.png

 

Let's change the drop down to Classified:

MegaJerk_1-1646292913623.png

 

Well now the Control does show up! 

 

The rule looks at the first part of our or statement, which is false because Classification DOES equal Classified

 

Classification !== "Classified"

 

 

When it gets to the next evaluation, it also fails because Cost is below 4900

 

Cost >= 4900

 

 

That means the entire evaluated statement returns false, which makes the control show up.

 

Let's increase the Cost to 5000

MegaJerk_2-1646293143990.png

 

As you can see, the Part# has once again vanished. 

While the first part of our Or statement fails and returns false, the next portion involving cost returns true because Cost *is* greater or equal to 4900.

 

Now let's set the Classification Control back to something other than Classified and see what happens:

MegaJerk_3-1646293257671.png

 

The control is hidden even though Cost was unchanged!

 

That's because the first part of our Or statement is:

 

Classification !== "Classified"

 

 

Because this statement is now true, it has no need to evaluate anything beyond that and returns true immediately invoking the rule to hide the control. 

 

If this is what you'd like then that's fine, however, if you'd like the logic to be something else like -

 

Part# should show if

  • Classification = "Classified", no matter what
  • Cost is >= 4900, no matter what

 

then the code would need to look something like:

 

!(Classification === "Classified" || Classification !== "Classified" && Cost < 4900)

 

 

(note: the exclamation point inverses the results of whatever it's in front of, in this case, our entire collected statement within the parentheses. So if our statement is true, the ! changes it to false, the opposite is likewise the case. it behaves like how the not() function you used in your own code does)

 

now what happens is because the form starts with Cost at 0, the Part# is shown:

MegaJerk_4-1646294247454.png

 

Increasing the value so that it's equal to or larger than 4900, Part# goes away:

MegaJerk_5-1646294321139.png

 

However, selecting Classified as the classification brings it back:

MegaJerk_6-1646294375756.png


and I think that covers just about everything. 

 

Actually, I'm not sure if you meant that it should be shown when Cost is lesser than or equal to, but because it wasn't specified, I didn't want to assume that's what you meant. However, if it is, then you can change the above more explicit code to: 

 

!(Classification === "Classified" || Classification !== "Classified" && Cost <= 4900)

 

 

I hope that this helps you to solve your problem. Let me know if it does / doesn't! 

 

 

 

Reply
dgraves
Scholar

Re: Hide control based on multiple conditions with "OR"

Jump to solution

Wow! Thank you so much for the quick response and for the wonderfully thorough explanation!! I had to tweak it just a tad but the format you had was exactly what I needed! This is what I ended up using: 

!(Classification === "Classified" || Cost <= 4900)

 

It hides the field if NOT Classified or if less than 4900. 🙂

Reply
MegaJerk
Collaborator

Re: Hide control based on multiple conditions with "OR"

Jump to solution

Very Good! I'm glad you were able to get it to work exactly how you needed! 

0 Kudos
Reply