如何从我的谈话活动中调用sayIt函数。我整夜都在和它斗争。
$(document).ready(function () {
var sayIt = (function() {
alert("I can now say something.");
})();
$("#talk").blur(function(){
sayIt(); //<-- Uncaught TypeError: sayIt is not a function
});
});
答案 0 :(得分:4)
sayIt
不是function
,因为您将该函数声明为自调用函数,而sayIt
只存储它返回的值。
$(document).ready(function () {
var sayIt = function() {
alert("I can now say something.");
};
sayIt(); // it you want to call it once
$("#talk").blur(function(){
sayIt(); //<-- Uncaught TypeError: sayIt is not a function
});
});
答案 1 :(得分:3)
您正在sayIt
中使用自我调用功能,因此它将在页面加载时独立执行并提醒文本。但是,当标识为talk
的元素模糊时,您需要发出警报。因此,删除该函数闭包,它按预期工作。
$(document).ready(function () {
var sayIt = function() {
alert("I can now say something.");
};
$("#talk").blur(function(){
sayIt();
});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' id='talk' />
&#13;
答案 2 :(得分:2)
你问题的关键是自我调用功能。当你把();在函数声明结束后,它意味着函数将调用自身。将您的功能更改为 -
$(document).ready(function () {
// declaration of function //
var sayIt = (function() {
alert("I can now say something.");
});
$("#talk").blur(function(){
sayIt(); //this will work fine
});
});
答案 3 :(得分:1)
在这种情况下,它不是一个功能。这是一个自我调用功能。
您需要将sayIt的代码更改为:
var sayIt = function () {
alert("I can now ay something.");
}
只有这样你才能从模糊事件中调用sayIt。
答案 4 :(得分:0)
您尝试在blur
上执行的函数是IIFE (立即调用的函数表达式),它在定义时运行,返回值为undefined
(如果未明确返回任何内容) )存储在IIFE 的变量sayIt
中。这意味着sayIt
不保留该函数,并且当您尝试将其作为导致错误的函数(sayIt()
)执行时:
为了获得预期的功能变化:
var sayIt = (function() {
alert("I can now say something.");
})();
要:
var sayIt = function() {
alert("I can now say something.");
}
答案 5 :(得分:0)
您正在使用自动调用功能,它会自动调用。因此,如果您需要调用此函数,则应从代码中删除(),以便代码如下所示 -
var sayIt = function() {
alert("I can now say something.");
});
但是如果你想用()调用,那么你需要使用像
这样的clouser策略var sayIt = (function() {
return function () {
alert("I can now say something.");
};
})();