我尝试将字符串转换为函数而不使用#state = "new jersey"
state.gsub!(/\b[a-z]/, &:capitalize)
#state = "New Jersey"
,但每当我将函数名称传递给window对象并检查其类型时。 Javascript似乎并不认为它是一个功能。我总是收到我在else语句中定义的自定义错误消息:eval()
。
我的"Could not find function: 1->validateLogin"
原型:
dom_ready
dom_ready: function (inputFunc) {
document.addEventListener("DOMContentLoaded", function () {
try {
inputFunc();
} catch (e) {
DN.errors.push(e.message);
}
});
},
答案 0 :(得分:1)
在其他答案中解决了导致问题的特定语法错误。要查找此类语法错误,请查看控制台是否存在错误。或者,通过linter运行代码。否则,每次忘记逗号时都必须发布到SO,这似乎不是一种可扩展的方法。
更基本的是,不要使用给出其名称的字符串来传递函数引用,然后您需要在窗口对象上查找。相反,只需传递函数引用本身(validateLogin
)。与其他一些语言不同,JS功能是一流的公民,可以作为自己参考和传播。你的代码看起来像这样:
DN.DOM.dom_ready(function () {
var event_ids = [
["#login-form-dialog", validateLogin, "submit", 1]
^^^^^^^^^^^^^
...
for (var i = 0; i < event_ids.length - 1; i++) {
var fN = event_ids[i][1];
当然,您必须确保在执行此就绪功能时validateLogin
可见。
但是,您有一个更基本的问题,它将阻止您的代码正常运行,如下所示:
$(event_ids[i][0]).on(event_ids[i][2], function () {
fN(event_ids[i][3]);
})
这里,匿名函数是变量i
的闭包,并且在执行时(事件发生时),i
已经达到其最大值3。关于此主题有很多关于SO的问题和答案,但最简单的解决方案是使用for (let i
,如果您在支持let
的环境中工作。否则,请参阅this one等问题。
答案 1 :(得分:0)
event_ids
中的第一项后您缺少逗号:
var event_ids = [
["#login-form-dialog", "validateLogin", "submit", 1], // <-- missing comma
["#loginnotes", "validateLogin", "click", 1],
["#loginnotes2", "validateLogin", "click", 2],
["#show-pass", "show_pass", "click", ""],
]; // <-- also it is better practice to have semi-colon here