此流星代码需要在main.js中定义的header.js中调用函数cleanSerializedArray();
,这两个文件都在客户端目录下。
浏览器控制台错误:
未捕获的ReferenceError:cleanSerializedArray未定义
但是,当定义移到相同的文件“ header.js”时,控制台会说
未定义
为什么这2个未预期的结果我都希望在两种情况下都能正常工作?谢谢
'use strict';
Template.header.events({
'click .mainMenu': function () {
//control the footer visibility
if (Session.get('showMainMenu')) {
Session.set('showMainMenu', false);
} else {
console.log(cleanSerializedArray()); //<------- called
//Meteor.call('storeUserInputs', objArray);
Session.set('showMainMenu', true);
}
});
function cleanSerializedArray() {
return $('form').serializeArray().forEach(function (item) {
item.value = item.value.replace(/[^0-9a-zA-Z]/g, '');
});
}
最佳答案
之所以得到undefined
,是因为Array.prototype.forEach
总是返回undefined
。
您可能想将您的cleanSerializedArray
函数更改为此:
function cleanSerializedArray() {
var array = $('form').serializeArray();
array.forEach(function (item) {
item.value = item.value.replace(/[^0-9a-zA-Z]/g, '');
});
return array;
}
至于您的
ReferenceError
,通常是由以下两种情况之一引起的:作用域:
window.addEventListener('DOMContentLoaded', function()
{
function myFunc(){ /* ... */ }
/* some code that uses myFunc */
});
/* myFunc is not available out here */
定时:
window.addEventListener('DOMContentLoaded', function()
{
window.myFunc = function(){ /* ... */ }
/* some code that uses myFunc */
});
/* myFunc is not available yet */
由于您似乎仅从事件处理程序调用该函数,因此与计时相比,范围界定问题的可能性要大得多。
尝试将函数声明为:
window.cleanSerializedArray = function() {
// ...
};