我成功地能够调用一个存在于IIFE之外的函数(function1
)。
我的问题是如何调用function2
?现在它返回function2
未定义。因此,我确信这不是从IIFE调用函数的正确方法。所以我很想知道正确的方法并欣赏一个简短的解释。
function function1() {
alert('1');
}
(function($){
function function2(){
alert('2');
}
})(jQuery);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" onkeypress="function1();"/>
<input type="text" onkeypress="function2();"/>
答案 0 :(得分:4)
onkeypress
属性在全局上下文中运行,因此无法在IIFE中查看该函数。
建议不要使用像这样的事件监听器的属性。
不要这样做,最好从IIFE中的代码附加事件监听器,也许是这样:
(function($){
function function2(){
alert('2');
}
$('#test2').on( 'keypress', function2 );
})(jQuery);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="test2" />
&#13;
我在输入元素中添加了id
属性,但在添加事件侦听器时,您还可以使用class
或其他方法来识别它。
答案 1 :(得分:3)
您的功能超出了您提供的代码范围。您可以将功能二移出IIFE,也可以在IIFE内的输入上注册事件。
function one() {
alert(1)
}
(function($) {
function two() {
alert(2)
}
$('.one').keypress(one)
$('.two').keypress(two)
})(jQuery)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="one" type="text" />
<input class="two" type="text" />
答案 2 :(得分:2)
当然使用jQuery!
function function1() {
console.log('1');
}
(function($){
$('input').eq(1).keypress(function function2() {
console.log('2');
})
})(jQuery);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" onkeypress="function1();"/>
<input type="text"/>
是的我知道我完全支持了这个问题。
关键是,你应该做一些被认为是良好做法的事情,而不是试图强迫一些被认为是不良行为的事情。
答案 3 :(得分:1)
如果您function2
公开
function function1() {
alert('1');
}
var myFuncs = (function($){
function function2(){
alert('2');
}
return {
fun2:function2
}
})(jQuery);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" onkeypress="function1();"/>
<input type="text" onkeypress="myFuncs.fun2();"/>
&#13;