addEventListener语法,带有变量函数名称第2部分

时间:2013-09-04 18:30:28

标签: jquery addeventlistener

同样的问题已被提出,但在不同的背景下:

我有两个div:

<div id='content'>Click Me!</div>
<div id='Div1'></div>

此代码有效(单击Click Me时显示“Function A”):

$(document).ready(function () {
setUp("1");
});

function setUp(i) {
    $('#content').on( 'mouseup', function( ) {f_A( );} )
}

function f_A() {
    $('#Div1').append(document.createTextNode("Function A"));
}

但是,我真正想要在setUp中做的是根据i的值选择要调用的几个函数之一。因此,我需要function( ) { f_A( );}之类的function( ) { FUNCTION_NAME_DEPENDING_ON_i( );},而不是{{1}}。我该怎么做呢? (我使用的是jQuery 1.9.1。)

2 个答案:

答案 0 :(得分:0)

将函数存储在对象(如果使用索引,则为数组)中:

$(document).ready(function () {
    // Note: instead of '1', you could pass 'f_A' or similar 
    setUp("1");
});

function setUp(i) {
    $('#content').on( 'mouseup', function( ) {funcs[i]( );} )
}

// Note: instead of '1' you could use readable names as the key: 'f_A' or similar
var funcs = {
    "1": function f_A() {
        $('#Div1').append(document.createTextNode("Function A"));
    }
};

Demo

注意:如果要在被调用函数中使用与事件处理程序相同的上下文,请使用以下格式:

$('#content').on( 'mouseup', function(evt) {funcs[i].call(this, evt);} )

答案 1 :(得分:0)

好的,我会尽力给你答案

使用开关声明 //如果您的i值限制在某个可管理范围内,例如4 5
你可以这样做

function setUp(i) {
    $('#content').on( 'mouseup', function( ) {
switch(i){
   case 1: funcs[1]( ); // and so on }} 

)}