Website Construction
JQuery validation and Twitter Typeahead
Submitted by Drew2k, 04-02-2017, 02:48 PM, Thread ID: 29017
Thread Closed
04-02-2017, 02:48 PM
#1 I am creating a website which utilises both JQuery validation and Twitter Typeahead, however have ran into a issue validating a input field using typeahead.js. The validation works on all other fields.
I have created an example form to show what i am doing. The below example has 3 input form fields, First Name, Last Name and Country with a submit button. The validation works on the 2 name fields, however only partially works on the country field which has typeahead.js on it. The field name changes colour, however the success/failed icon fails to display.
The HTML is strait forward
The javascript for JQuery Validation is
And the javascript for the typeahead is
I need the icon to appear on the country input field when validating with typeahead.
I have created an example form to show what i am doing. The below example has 3 input form fields, First Name, Last Name and Country with a submit button. The validation works on the 2 name fields, however only partially works on the country field which has typeahead.js on it. The field name changes colour, however the success/failed icon fails to display.
The HTML is strait forward
Code:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>jQuery UI Autocomplete - Default functionality</title>
<link href="/assets/global/css/components-rounded.min.css" rel="stylesheet" id="style_components" type="text/css" />
<link href="http://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700&subset=all" rel="stylesheet" type="text/css" />
<link href="/assets/global/plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
<link href="/assets/global/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<link href="/assets/layouts/css/layout.min.css" rel="stylesheet" type="text/css" />
<link href="/assets/layouts/css/themes/default.min.css" rel="stylesheet" type="text/css" id="style_color" />
</head>
<body>
<div class="page-content-wrapper">
<!-- BEGIN CONTENT BODY -->
<div class="page-content">
<form id="form_sample_1" class="form-horizontal">
<div class="form-body">
<div class="form-group">
<label class="control-label col-md-3">First Name <span class="required">
* </span>
</label>
<div class="col-md-8">
<div class="input-icon right">
<i class="fa"></i>
<input type="text" class="form-control" placeholder="First Name" name="firstname" />
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3">Last Name <span class="required">
* </span>
</label>
<div class="col-md-8">
<div class="input-icon right">
<i class="fa"></i>
<input type="text" class="form-control" placeholder="Last Name" name="lastname" />
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3">Country <span class="required">
* </span>
</label>
<div class="col-md-8">
<div class="input-icon right">
<i class="fa"></i>
<input type="text" class="form-control typeahead" placeholder="Country" name="country" />
</div>
</div>
</div>
</div>
<button type="submit" class="submitbutton btn yellow" id="save">Save</button>
</form>
</div>
</div>
<script src="/assets/global/plugins/jquery.min.js" type="text/javascript"></script>
<script src="/assets/global/plugins/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<script src="/assets/global/plugins/typeahead/typeahead.bundle.min.js" type="text/javascript"></script>
<script src="/assets/global/plugins/jquery-validation/js/jquery.validate.min.js" type="text/javascript"></script>
<script src="/assets/global/plugins/jquery-validation/js/additional-methods.min.js" type="text/javascript"></script>
The javascript for JQuery Validation is
Code:
$(function() {
// Initialize form validation on the registration form.
// It has the name attribute "registration"
$("#form_sample_1").validate({
// Specify validation rules
rules: {
// The key name on the left side is the name attribute
// of an input field. Validation rules are defined
// on the right side
firstname: {
required: true,
minlength: 5
},
lastname: {
required: true,
minlength: 5
},
country: {
required: true,
minlength: 5
}
},
// Specify validation error messages
messages: {
firstname: "Please enter your firstname"
},
errorPlacement: function(e, r) {
var i2 = $(r).parent(".input-icon").children("i");
i2.addClass("fa-warning");
i2.removeClass("fa-check").addClass("fa-warning"), i2.attr("data-original-title", e.text()).tooltip({
container: "body"
});
},
success: function(e, r) {
var i2 = $(r).parent(".input-icon").children("i");
$(r).closest(".form-group").removeClass("has-error").addClass("has-success"), i2.removeClass("fa-warning").addClass("fa-check")
},
// Make sure the form is submitted to the destination defined
// in the "action" attribute of the form when valid
submitHandler: function(form) {
//form.submit();
}
});
});
And the javascript for the typeahead is
Code:
var countries = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.whitespace,
queryTokenizer: Bloodhound.tokenizers.whitespace,
// url points to a json file that contains an array of country names, see
// https://github.com/twitter/typeahead.js/blob/gh-pages/data/countries.json
prefetch: '/assets/typeahead_countries.json'
});
// passing in `null` for the `options` arguments will result in the default
// options being used
$('.typeahead').typeahead(null, {
name: 'countries',
source: countries
});
I need the icon to appear on the country input field when validating with typeahead.
Users browsing this thread: 1 Guest(s)