我試圖在嘗試在我自己的django項目中實現它時調試一個使用python-django應用程序的JS/Jquery問題。我用我的瀏覽器的開發者控制檯來獲取以下錯誤:Jquery Javascript函數未定義
TypeError: 'undefined' is not a function (evaluating '$(this).yourlabsWidget()')
所以我去查找功能「yourlabsWidget()定義在哪裏,它是直接在其上放置函數調用。
$.fn.yourlabsWidget = function(overrides) { ... }
$(document).ready(function() {
$('.autocomplete-light-widget[data-bootstrap=normal]').live('initialize', function() {
$(this).yourlabsWidget();
});
我對JavaScript或jquery瞭解不多,所以我完全不知所措。假設沒有任何語法錯誤,這樣的問題是否意味着jquery無法正常工作?我知道這不是很多信息,但我會添加任何其他需要的相關信息。
的應用程序和具體的文件給我找麻煩的位置(分別),
我測試過它自己的測試項目中的應用在我的開發服務器上,它可以在自己的測試項目中使用。但是,如果我將一個正在運行的測試應用程序安裝到我自己的django項目中,它將不再有效。
UPDATE:
全功能定義:
$.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(含)
<!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"
>
注:我知道這個網址是不是便攜。這只是爲了測試。
你可以提供$ .fn.yourlabsWidget()的實現嗎? – nekman
我認爲通過實現你的意思是函數的代碼。當然可以。我會更新這個問題。如果這不是你的意思,請讓我知道,我會糾正。 – Jglstewart
如果'在開箱即用的自己的測試項目中工作'不清楚什麼是不同的,當你得到錯誤 – charlietfl