Creating dynamic forms can be time consuming. Hiding one field based on another field value is pretty easy. But when you have to set up a form with many inputs showing and hiding based on may different input values your code can get ugly really fast. formCondtions plugin attempts to make your life easier by providing a standard api to get your form code under control.
The markup
The plugin assumes that your form markup is very simular to this
<form>
<fieldset>
<legend>Contact Info</legend>
<div>
<label>first name</label><input type="text" name="firstname">
</div>
<div>
<label>last name</label><input type="text" name="lastname">
</div>
<div>
<label>email</label><input type="text" name="email">
</div>
</fieldset>
</form>
Each input and label must be wrapped in another element such as a <div> <span> <li> , etc. This lets the pugin easly show / hide that element. Note: you don't have to have a fieldset.
Set up your conditions
$('form').formConditons({
conditions: [
{
name: 'lastname',
rules: [
{
selector: 'input[name=email]',
operator: 'contains',
value: '@'
}
],
tru: [
{
selector: 'input[name=lastname]',
action: 'show'
}
],
fal: [
{
selector: 'input[name=lastname]',
action: 'hide'
}
]
}
})
On this form I'm saying if the email contains @ show the lastname field else hide it.
Options
Currently there is only one option for this plugin, conditions, It's a array. Here is the break down of a condtion
| parameter | description | default |
|---|---|---|
| name | The name of the condition. This isn't required but if you want to remove the condition from the form you will need to supply one | |
| rules | array comprised of objects with the following properties
| [] |
| tru | array, these outcomes are run if all of the rules are true. an outcome is an object with the following properties
| [] |
| fal | see tru, the only difference is that these outcomes are run if the rules are false, Say you have 3 rules on defined and only 2 of them are true then this set of outcomes would run | [] |
Methods
| name | description | Arguments |
|---|---|---|
| addCondition | Add a condtion to the stack | conditon object |
| removeCondition | remove a condtion | name of the condtion |
As a side note you can add your outcome actions by extending the widget protoype like this
$.extend($.jb.formConditons.prototype.outcomeActions,{
'youractionname': function(){}
})
Please feel free to leave your ideas and or comments below.