这段Meteor代码需要调用main.js中定义的header.js中的函数cleanSerializedArray();
,这两个文件都在client目录下。
浏览器控制台错误:
Uncaught ReferenceError: cleanSerializedArray is not defined
但是当定义移动到同一个文件“header.js”时,控制台会显示
undefined
为什么会出现这 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, '');
});
}
最佳答案
你会得到未定义
,因为Array.prototype.forEach
始终返回未定义
。
您可能想将 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() {
// ...
};
关于javascript - 调用客户端函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35951293/