Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var autocomplete = {
- lastSearch: null,
- fields: [],
- fldIndex: 0,
- setup: function() {
- $('.ac_item').live('click', function (ev) {
- autocomplete.itemSelect($(this).attr('acid'), $(this).attr('value'), $(this).html());
- });
- },
- create: function(masterContainer, searchField, searchAction, renderItemCallback, selectItemCallback) {
- var index = autocomplete.fldIndex++;
- autocomplete.fields[index] = {
- field: searchField,
- lastVal: "",
- containerOpen: false,
- masterContainer: masterContainer,
- container: null,
- feedback: null,
- action: searchAction,
- renderItemCB: renderItemCallback,
- selectItemCB: selectItemCallback,
- value: null
- };
- $(masterContainer).attr('acid', index);
- $(masterContainer).addClass('ac_master_container');
- $(searchField).attr('acid', index);
- $(searchField).addClass('ac_field');
- $(masterContainer).append("<div class=\"ac_container\" style=\"display: none;\" acid=\""+index+"\"></div>");
- autocomplete.fields[index].container = ".ac_container[acid=\""+index+"\"]";
- $(masterContainer).append("<div class=\"ac_feedback\" style=\"display: none;\" acid=\""+index+"\"><img src=\"images/loading.gif\" alt=\"Carregando\" /> Buscando...</div>");
- autocomplete.fields[index].feedback = ".ac_feedback[acid=\""+index+"\"]";
- autocomplete.checkUpdates(index);
- },
- checkUpdates: function(fld) {
- var field = autocomplete.fields[fld];
- var value = $(field.field).val();
- if(value != field.lastVal && field.value == null) {
- field.lastVal = value;
- autocomplete.search(fld, value);
- autocomplete.openContainer(fld);
- }
- setInterval("autocomplete.checkUpdates("+fld+");", 2500);
- },
- search: function(fld, query) {
- var field = autocomplete.fields[fld];
- autocomplete.openContainer(fld);
- autocomplete.setLoading(fld);
- if(autocomplete.lastSearch != null) {
- autocomplete.lastSearch.abort();
- }
- autocomplete.lastSearch = $.post(
- anchor(field.action),
- {'query': query, 'LEAN_MODE': 'yes'},
- function (raw) {
- try {
- if(raw == null || typeof raw != "string" || raw == "" || raw.length <= 0) { return; }
- var data = JSON.parse(raw);
- $(field.container).html("");
- if(data.length <= 0) {
- autocomplete.closeContainer(fld);
- } else {
- for(var i in data) {
- var html = field.renderItemCB(field, i, data[i]);
- $(field.container).append("<div class=\"ac_item\" acid=\""+fld+"\" value=\""+data[i].id+"\">" + html + "</div>");
- }
- autocomplete.openContainer(fld);
- }
- } catch (e) {
- announce("Ocorreu um erro ao buscar o banco de dados! " + e.message, "error");
- }
- autocomplete.setIdle(fld);
- }
- );
- },
- itemSelect: function(fld, value, label) {
- var field = autocomplete.fields[fld];
- $(field.field).val(value);
- field.value = value;
- field.selectItemCB(field, value, label);
- autocomplete.closeContainer(fld);
- },
- restart: function(fld) {
- var field = autocomplete.fields[fld];
- autocomplete.closeContainer(fld);
- $(field.field).val("");
- field.value = null;
- field.restartCB(fld);
- $(field.field).trigger('focus');
- },
- openContainer: function(fld) {
- var field = autocomplete.fields[fld];
- if(!field.containerOpen) {
- $(field.container).slideDown(500);
- field.containerOpen = true;
- }
- },
- closeContainer: function(fld) {
- var field = autocomplete.fields[fld];
- if(field.containerOpen) {
- $(field.container).slideUp(500);
- field.containerOpen = false;
- }
- },
- setLoading: function(fld) {
- var field = autocomplete.fields[fld];
- $(field.feedback).css('display','block');
- },
- setIdle: function(fld) {
- var field = autocomplete.fields[fld];
- $(field.feedback).css('display','none');
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement