此Meteor代码需要调用header.js中的函数cleanSerializedArray();
,该函数在main.js中定义,两个文件都在客户端目录下。
浏览器控制台错误:
未捕获的ReferenceError:未定义cleanSerializedArray
但是当定义移动到同一个文件“header.js”时,控制台会说
未定义
为什么这两个非预期的结果,我希望看到这两种情况下的功能都有效?感谢
'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, '');
});
}
答案 0 :(得分:1)
您获得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() {
// ...
};