调用IIFE内部的函数

时间:2017-06-29 06:04:53

标签: javascript jquery

我成功地能够调用一个存在于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();"/>

4 个答案:

答案 0 :(得分:4)

onkeypress属性在全局上下文中运行,因此无法在IIFE中查看该函数。

建议不要使用像这样的事件监听器的属性。

不要这样做,最好从IIFE中的代码附加事件监听器,也许是这样:

&#13;
&#13;
(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;
&#13;
&#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公开

,则可以使用它

&#13;
&#13;
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;
&#13;
&#13;