We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 12379
    • 460 Posts
    Is is possible to have eForm validate certain input fields if certain other conditions are met?

    For example:

    Choosing between two payment methods:
    1. cash (radio button)
    2. credit card (radio button)

    If the credit card button radio button is selected then the card name, card number and card expiry input fields that follow are validated.

    If cash is chosen then the credit card details are ignored.
      Mostly harmless.
      • 5340
      • 1,624 Posts
      YES

      You need to create your own custom snippet to do that. Also you need to call the snippet before your eForm call and use the eForm event that suits your need. In your case should be eFormOnValidate.

      You can find more info in the docs folder on eForm(see the last example)

      Have a look at this




        • 12379
        • 460 Posts
        thanks - did the trick!

        <?php
        function reqFields(&$fields, &$vMsg, &$rMsg, &$rClass) { //<-- $rClass holds assoc. array of class names for fields (for eForm > 1.4.4)
        	global $modx;
        
        		/* optional. load parameter values for error css classes */
        		$req_class_name = $modx->event->params['requiredClass'];
        		$inv_class_name = $modx->event->params['invalidClass'];
        		/* end optional */
        
        		if ($fields['payment-type'] == 'Credit card'){
        			
        			if ($fields['card-type'] == ''){
        				$rMsg['card-type'] = "card type required";  //<-- should be the field name or description only
        				$rClass['card-type'] .= $rClass['card-type'] ? ' ' . $req_class_name : $req_class_name; //optional.
        			}
        
        		        if ($fields['card-name'] == ''){
        				$rMsg['card-name'] = "name on credit card required";  
        				$rClass['card-name'] .= $rClass['card-name'] ? ' ' . $req_class_name : $req_class_name; //optional.
        			}
        
        			if ($fields['card-number'] == ''){
        				$rMsg['card-number'] = "credit card number required";  
        				$rClass['card-number'] .= $rClass['card-number'] ? ' ' . $req_class_name : $req_class_name; //optional.
        			}
        
        			if ($fields['card-vcode'] == ''){
        				$rMsg['card-vcode'] = "credit card validation code required";  
        				$rClass['card-vcode'] .= $rClass['card-vcode'] ? ' ' . $req_class_name : $req_class_name; //optional.
        			}
        
        			if ($fields['cc-month'] == ''){
        				$rMsg['cc-month'] = "credit card expiry month";  
        				$rClass['cc-month'] .= $rClass['cc-month'] ? ' ' . $req_class_name : $req_class_name; //optional.
        			}
        
        			if ($fields['cc-year'] == ''){
        				$rMsg['cc-year'] = "credit card expiry year"; 
        				$rClass['cc-year'] .= $rClass['cc-year'] ? ' ' . $req_class_name : $req_class_name; //optional.
        			}
        
        		} else if ($fields['payment-type'] == 'AusPost Money Order'){
        			//do nothing
        
                } else if ($fields['payment-type'] == 'Payment on pickup'){
        			//do nothing
        
        		} else {
        		        $vMsg['payment-type'] = "payment type required";  //<-- use $vMsg not $rMsg. Add a full error message
        		        $rClass['payment-type'] .= $rClass['payment-type'] ? ' ' . $inv_class_name : $inv_class_name; //optional.
        		}
        
        	return true;
        }
        ?>
          Mostly harmless.