jQuery调用未定义的Globalize.format函数
问题描述:
我试图让全球化与jQuery中的微调控件一起工作。我的代码包括被排序为这样:jQuery调用未定义的Globalize.format函数
<script type='text/javascript' src='/js/jquery-2.0.3.min.js'></script>
<script type='text/javascript' src='/js/jquery-migrate-1.2.1.min.js'></script>
<script type='text/javascript' src='/css/jquery/jquery-ui.js'></script>
<script type='text/javascript' src="/resources/js/cldr.js"></script>
<script type='text/javascript' src="/resources/js/cldr/event.js"></script>
<script type='text/javascript' src="/resources/js/cldr/supplemental.js></script>
<script type='text/javascript' src="/resources/js/globalize.js"></script>
<script type='text/javascript' src="/resources/js/globalize/message.js"></script>
<script type='text/javascript' src="/resources/js/globalize/number.js"></script>
<script type='text/javascript' src="/resources/js/globalize/plural.js"></script>
<script type='text/javascript' src="/resources/js/globalize/date.js"></script>
<script type='text/javascript' src="/resources/js/globalize/currency.js"></script>
<script type='text/javascript' src='js/index.js'></script>
我尝试加载CLDR东西,如他们的文件说之后,我经过每一个旋转的容器,并根据输入的名义申请的微调控件:
$.when(
$.get("/resources/js/cldr/main/en/numbers.json"),
$.get("/resources/js/cldr/main/en/currencies.json"),
$.get("/resources/js/cldr/supplemental/likelySubtags.json"),
$.get("/resources/js/cldr/supplemental/numberingSystems.json"),
$.get("/resources/js/cldr/supplemental/ordinals.json"),
$.get("/resources/js/cldr/supplemental/plurals.json")
).then(function() {
// Normalize $.get results, we only need the JSON, not the request statuses.
return [].slice.apply(arguments, [ 0 ]).map(function(result) {
return result[ 0 ];
});
}).then(Globalize.load).then(function() {
/**
Add a spinner to each spinner class
*/
$(".spinner").each(function() {
var $S = $(this).children("input");
var name = $(this).attr("name");
switch (name) {
case "one-count":
$S.spinner({
min: 0,
step: 1,
start: 0
});
break;
case "currency-1k-count":
$S.spinner({
min: 0,
step: 1000,
start: 0,
numberFormat: "C"
});
break;
}
});
});
当我包括微调控件的属性部分的NUMBERFORMAT和去点击页面上的微调,它抛出一个错误说:
Uncaught TypeError: Globalize.format is not a function jquery-ui.js(line:12778)
我去TH e jquery-ui.js文件在12778行,我发现它正在调用Globalize.format。所以我进入我的Globalize.js文件,并没有函数称为格式...什么给?
答
来自版本1.x的全球化库,没有用于格式化所有模块中的数字的格式化函数,但是它是否具有特定货币模块currencyFormatter中的每个模块的方法。我看的解决方案是:
var locale = 'es-CO';
$.when(
$.getJSON(window.Misc.urlFull("cldr/supplemental/likelySubtags.json")),
$.getJSON(window.Misc.urlFull("cldr/main/"+ locale +"/numbers.json")),
$.getJSON(window.Misc.urlFull("cldr/supplemental/numberingSystems.json")),
$.getJSON(window.Misc.urlFull("cldr/supplemental/plurals.json")),
$.getJSON(window.Misc.urlFull("cldr/supplemental/ordinals.json")),
$.getJSON(window.Misc.urlFull("cldr/main/"+ locale +"/currencies.json")),
$.getJSON(window.Misc.urlFull("cldr/supplemental/currencyData.json"))
).then(function() {
// Normalize $.get results, we only need the JSON, not the request statuses.
return [].slice.apply(arguments, [ 0 ]).map(function(result) {
return result[ 0 ];
});
}).then(Globalize.load).then(function() {
Globalize.locale(locale);
$.widget("ui.sspinner", $.ui.spinner, {
_parse: function(val) {
if (typeof val === "string" && val !== "") {
val = window.Globalize && this.options.numberFormat ?
Globalize.numberParser({ maximumFractionDigits : 10 })(val) : +val;
}
return val === "" || isNaN(val) ? null : val;
},
_format: function(value) {
if (value === "") {
return "";
}
if(window.Globalize && this.options.numberFormat){
this.options.currency || (this.options.currency = 'COP');
switch(this.options.numberFormat) {
case 'C': return Globalize(this.options.culture).formatCurrency(value, this.options.currency); break;
default: return Globalize(this.options.culture).formatNumber(value); break;
}
}
}
});
var config = {
'.spinner-currency' : {
step: 5,
start: 1000,
min: 0,
numberFormat: "C",
culture: 'es-CO',
currency: 'COP'
},
'.spinner-quantity': {
step: 1,
start: 1,
min: 0
}
};
for (var selector in config) {
$(selector).each(function(index, el) {
var $el = $(el);
var spinner = {};
if(!$el.sspinner("instance")){
spinner = $el.sspinner(config[selector]);
if($el.val() == '')
spinner.sspinner("value", 0);
}
});
}
});
答
你得到了错误,因为你有其他jQuery conflict
。所以检查哪个JS导致的问题。如果您发现js添加jQuery.noConflict();
可解决您的问题。
+0
无论哪种方式都没有格式的功能。所以对这个功能的调用无论如何都会发生爆炸 –
而且Globalize.parseFloat是不确定的为好。为什么jQuery调用这些函数,如果它们不存在? –