auto-complete.js
1.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
modulejs.define('AutoComplete', ['jquery'], function($) {
'use strict';
function get_hidden_description_field(autocomplete_field, klass) {
var field = $(autocomplete_field);
field = field.parent().parent().find(klass);
return field;
}
function verify_autocomplete(field, klass) {
var field = $(field);
var selected = get_hidden_description_field(field, klass);
var message_error = $(field).parent().find(".autocomplete_validation_message");
if( field.length === 0 || selected.val().length === 0 ) {
message_error.removeClass("hide-field");
selected.val("");
message_error.show();
} else {
field.val(selected.attr("data-label"));
message_error.hide();
}
}
function enable_autocomplete(field_name, field_value_class, autocomplete_class, ajax_url, select_callback) {
$(autocomplete_class).autocomplete({
source : function(request, response){
$.ajax({
type: "GET",
url: ajax_url,
data: {query: request.term, field: field_name},
success: function(result){
response(result);
}
});
},
minLength: 0,
select : function (event, selected) {
var description = get_hidden_description_field(this, field_value_class);
description.val(selected.item.id);
description.attr("data-label", selected.item.label);
if( select_callback !== undefined ) {
select_callback(selected);
}
}
}).blur(function(){
verify_autocomplete(this, field_value_class);
}).click(function(){
$(this).autocomplete("search", "");
});
}
return {
enable: enable_autocomplete
}
});