Wizard Style Step By Step Progress Plugin - jQuery Finite State Machine
| File Size: | 9.14 KB |
|---|---|
| Views Total: | 1856 |
| Last Update: | |
| Publish Date: | |
| Official Website: | Go to website |
| License: | MIT |
Finite State Machine is a lightweight jQuery plugin used to create interactive, wizard style steps & forms that support flow control of wizard steps. Compatible with Bootstrap 3/4 frameworks.
Basic usage:
1. Download the place the Finite State Machine plugin's script after you've loaded jQuery JavaScript library.
<script src="//code.jquery.com/jquery-3.2.1.min.js"></script> <script src="js/jquery.finiteStateMachine.js"></script>
2. Load the Bootstrap 4 framework for better styling (OPTIONAL).
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
3. Create a basic linear wizard.
<div id="sm">
<div class="row">
<div class="col-md-12">
<div class="fsm-state fsm-initial" data-state="1">
This (State 1 - Initial)
</div>
<div class="fsm-state" data-state="2">
Is (State 2)
</div>
<div class="fsm-state" data-state="3">
A (State 3)
</div>
<div class="fsm-state" data-state="4">
Finite State Machine (State 4)
</div>
<div class="fsm-state fsm-final" data-state="5">
Example (State 5 - Final)
</div>
</div>
</div>
<div class="row justify-content-between">
<div class="col-md">
<button type="button" class="btn btn-primary fsm-prev"><< Prev</button>
</div>
<div class="col-md">
<button type="button" class="btn btn-primary fsm-next float-right">Next >></button>
</div>
</div>
</div>
$('#sm').finiteStateMachine({
linear: true
});
4. Create a complex form wizard as follows:
<form id="cm">
<div class="row">
<div class="col-md-12">
<div class="fsm-state fsm-initial" data-state="1" data-evaluator="evaluatorFunc">
<h4>Report a Problem</h4>
<div class="form-group">
<label for="select1">What's wrong?</label>
<select class="form-control" id="select1">
<option value="1">Bad UX</option>
<option value="2">Bug</option>
<option value="3">Abuse</option>
</select>
</div>
</div>
<div class="fsm-state" data-state="2" data-evaluator="evaluatorFunc">
<div class="form-group">
<label for="badUXinput">Tell us more about your issue</label>
<textarea class="form-control" id="badUXinput" rows="3"></textarea>
</div>
</div>
<div class="fsm-state" data-state="3" data-evaluator="evaluatorFunc">
<div class="form-group">
<label for="screenshotFile">Send us a screenshot of the issue if you want</label>
<input type="file" class="form-control-file" id="screenshotFile" aria-describedby="fileHelp1">
<small id="fileHelp1" class="form-text text-muted">.jpg, .jpeg, .png or .bmp</small>
</div>
</div>
<div class="fsm-state" data-state="4" data-evaluator="evaluatorFunc">
<div class="form-group">
<label for="inputFile">Any files you wish to send with your report?</label>
<input type="file" class="form-control-file" id="inputFile" aria-describedby="fileHelp2">
<small id="fileHelp2" class="form-text text-muted">Any extension.</small>
</div>
</div>
<div class="fsm-state fsm-final" data-state="5" data-evaluator="evaluatorFunc">
<p>Thank you for your feedback. We will be analyzing it soon.</p>
<p>Please click in the submit button below to send your feedback.</p>
<button type="submit" class="btn btn-primary">Submit</button>
</div>
<div class="row justify-content-between">
<div class="col-md">
<button id="fsm-prev" type="button" class="btn btn-primary"><< Prev</button>
</div>
<div class="col-md">
<button id="fsm-next" type="button" class="btn btn-primary fsm-next float-right">Next >></button>
</div>
</div>
</div>
</div>
</form>
function evaluatorFunc () {
switch ($('#cm').getCurrentState().data('state')) {
case 1:
return 2;
case 2:
if ($('#select1').val() == '1')
return 4;
else
return 3;
case 3:
return 4;
case 4:
return 5;
}
};
$('#cm').finiteStateMachine({
prevSelector: '#fsm-prev',
nextSelector: '#fsm-next'
});
5. All default plugin settings and callback functions.
$('#el').finiteStateMachine({
tateSelector: '.fsm-state',
nextSelector: '.fsm-next',
prevSelector: '.fsm-prev',
initialSelector: '.fsm-initial',
finalSelector: '.fsm-final',
fadeSpeed: 300,
linear: false,
before: null,
after: null,
callback: null
});
This awesome jQuery plugin is developed by garcia-pedro-hr. For more Advanced Usages, please check the demo page or visit the official website.









