2012-12-22 18 views
5

Sto cercando di eseguire il debug di un problema JS/Jquery con un'applicazione python-django durante il tentativo di attuarlo nel mio progetto Django. Ho usato console sviluppatori del mio browser per recuperare il seguente errore:Jquery Javascript non definita

TypeError: 'undefined' is not a function (evaluating '$(this).yourlabsWidget()') 

Così sono andato a cercare in cui è stata definita la funzione 'yourlabsWidget(), ed è direttamente sopra dove la chiamata di funzione è.

$.fn.yourlabsWidget = function(overrides) { ... } 

$(document).ready(function() { 
$('.autocomplete-light-widget[data-bootstrap=normal]').live('initialize', function() { 
    $(this).yourlabsWidget(); 
}); 

io non so molto di javascript o jQuery, quindi sono completamente ad una perdita qui. Supponendo che non vi sia nulla di sintatticamente sbagliato, un problema come questo implica che jquery non funzioni correttamente? So che non ci sono molte informazioni da seguire, ma aggiungerò qualsiasi altra informazione pertinente richiesta.

Il file app e specifico mi dà fastidio sono qui (rispettivamente),

Ho testato l'applicazione con il proprio progetto di test sul mio server di sviluppo, e funziona fuori dalla scatola con il proprio progetto di test. Tuttavia, se prendo un'applicazione di prova di lavoro e installarlo al mio Django-progetto non funziona più.

UPDATE:

intera definizione di funzione:

$.fn.yourlabsWidget = function(overrides) { 
var overrides = overrides ? overrides : {}; 

if (this.data('widget') == undefined) { 
    // Instanciate the widget 
    var widget = new yourlabs.Widget(this); 

    // Pares data-* 
    var data = this.data(); 
    var dataOverrides = {autocompleteOptions: {}}; 
    for (var key in data) { 
     if (!key) continue; 

     if (key.substr(0, 12) == 'autocomplete') { 
      var newKey = key.replace('autocomplete', ''); 
      newKey = newKey.replace(newKey[0], newKey[0].toLowerCase()) 
      dataOverrides['autocompleteOptions'][newKey] = data[key]; 
     } else { 
      dataOverrides[key] = data[key]; 
     } 
    } 

    // Allow attribute overrides 
    widget = $.extend(widget, dataOverrides); 

    // Allow javascript object overrides 
    widget = $.extend(widget, overrides); 

    this.data('widget', widget); 

    // Setup for usage 
    widget.initialize(); 

    // Widget is ready 
    widget.widget.attr('data-widget-ready', 1); 
    widget.widget.trigger('widget-ready'); 
} 

return this.data('widget'); 
} 

HTML (incluse) MODULO

<!DOCTYPE html> 
<html lang="en-us" > 
<head> 
<title></title> 
<link rel="stylesheet" type="text/css" href="/static/admin/css/base.css" /> 
<link rel="stylesheet" type="text/css" href="/static/admin/css/forms.css" /> 
<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="/static/admin/css/ie.css"  /><![endif]--> 

<script type="text/javascript">window.__admin_media_prefix__ = "/static/admin/";</script> 


    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script> 

<script type="text/javascript" src="/static/autocomplete_light/autocomplete.js"></script> 
<script type="text/javascript" src="/static/autocomplete_light/widget.js"></script> 
<script type="text/javascript" src="/static/autocomplete_light/addanother.js"></script> 
<script type="text/javascript" src="/static/autocomplete_light/text_widget.js"></script> 
<script type="text/javascript" src="/static/autocomplete_light/remote.js"></script> 
<link rel="stylesheet" type="text/css" href="/static/autocomplete_light/style.css" /> 

HTML:

<span class="autocomplete-light-widget customer_order_products_set-0-product_id 
single" 
id="id_customer_order_products_set-0-product_id-wrapper" 
data-max-values="1" data-bootstrap="normal" 
data-autocomplete-url="http://127.0.0.1:8000/autocomplete/InventoryAutocomplete/" data-autocomplete-choice-selector="[data-value]" data-autocomplete-placeholder="THIS IS WORKING" 
> 

NOTA: So che l'URL non è portatile. È solo per test.

+0

Potete fornire l'implementazione per $ .fn.yourlabsWidget()? – nekman

+0

Penso che per implementazione intendi il codice per la funzione. Certo che si può. Aggiornerò la domanda Se non è quello che intendevi, per favore fammelo sapere e correggerò. – Jglstewart

+0

se 'funziona fuori dalla scatola con nel proprio progetto di test' non è chiaro cosa è diverso quando si ottiene l'errore – charlietfl

risposta

0

avete provato in questo modo:

$.fn.yourlabsWidget = function(overrides) { ... }; 
$(document).ready(function() { 
    $('body').on('load', function() { 
     $('.autocomplete-light-widget input[data-bootstrap=normal]').yourlabsWidget(); 
    }); 
}); 

o si può provare anche questa:

$(document).ready(function() { 
    $('.autocomplete-light-widget input[data-bootstrap=normal]').yourlabsWidget(); 
}); 

Credo che vi manca l'ingresso o selezionare di riferimento tag nel codice. vedere se questo funziona

+0

Bene, l'errore scompare quando lo faccio, ma la mia applicazione continua a non funzionare. Non credo davvero che ci sia un problema con il codice stesso, dal momento che ho testato l'applicazione con il suo progetto di test sul mio server di sviluppo, e funziona fuori dalla scatola con il suo progetto di test. Lo aggiungerò alla domanda. – Jglstewart

+0

vedere la risposta aggiornata, spero che questo aiuti. – Jai

+0

grazie per l'input. La seconda opzione mi sta dando lo stesso identico errore. – Jglstewart

3

$(this).yourlabsWidget() undefined is not a function

Ciò significa che $(this).yourlabsWidget non è definito.

si sta caricando jQuery due volte:

  • jQuery è caricato
  • completamento automatico plug-in viene caricato in jQuery
  • jQuery è caricato di nuovo
  • non avere il plugin autocomplete
+0

Questa è la risposta giusta! Il tuo file base.html e altri file html estesi potrebbero chiamare jQuery –