PDA

View Full Version : [Jquery] Problema creazione widget autocompletamento


mrivan
03-10-2014, 11:00
Buongiorno a tutti,

Ho realizzato un widget jquery partendo dall'autocompletamento ma c'è qualcosa che non va quando eseguo la page mi va sbito in errore :

Uncaught TypeError: undefined is not a function su -> $("#"+idCampo).mrautocomplete({

Perchè? mi sapete dare una mano.

Grazie mile.




$.widget('custom.mrautocomplete', $.ui.autocomplete, {
/// bla bla bla
});

function autocomplete (idCampo, swHeader, columnsHeader, minLeng, aFocus, viewScroll, urlAjax, dataAjax ){

if(dataAjax != null){
urlAjax = componiURL(urlAjax, dataAjax);
}

$("#"+idCampo).mrautocomplete({
showHeader: swHeader,
columns: columnsHeader,
minLength: minLeng,
autoFocus: aFocus,
cacheLength: 1,
scroll: viewScroll,
highlight: true,
source: function( request, response ) {
$.ajax({
dataType: "json",
url: urlAjax,
data: {
id: request.term
},
success: function( data ) {
response( data );
},
error: function (xhr, textStatus, errorThrown) {
var errorMessage = "Ajax error: " + this.url + " : " + textStatus + " : " + errorThrown + " : " + xhr.statusText + " : " + xhr.status;
if (xhr.status != "0" || errorThrown != "abort") {
alert(errorMessage);
}
}
});
}
});
}

function autocompleteMin (idCampo, columnsHeader, minLeng, urlAjax, dataAjax ){
autocomplete (idCampo, true, columnsHeader, minLeng, true, true, urlAjax, dataAjax );
}

function componiURL (urlAjax, dataAjax){

var primoElemento = true;

$.each(dataAjax, function(nome, valore) {

var separatore = "&";

if(primoElemento){
primoElemento = false;
separatore = "?";
}

urlAjax=urlAjax+ separatore +nome+"="+valore;
});

return urlAjax;
}

wingman87
03-10-2014, 12:07
In passato mi sono capitati problemi simili e il problema era che avevo incluso due volte jQuery. In pratica la seconda inclusione cancellava tutti i plugin che venivano creati tra la prima e la seconda inclusione. Essendo ridefinito, jQuery veniva riportato allo stato iniziale.
Questo e' un caso simile, perche' immagino che se effettui un debug e ti porti subito dopo la definizione del plugin, scrivendo nella console $().mrautocomplete la troverai definita. Evidentemente tra la definizione e la chiamata alla funzione autocomplete avviene qualcosa che cancella il plugin.