JQuery将值传递给函数接受事件对象参数

时间:2017-07-18 10:06:53

标签: javascript jquery events

我尝试调用已经与事件侦听器一起使用的函数。

例如,我设置了我的事件监听器:

$('#country_choice').on('change', {opt: 1}, revealOption);

并且revealOption函数包含一个switch语句:

function revealOption(event){
        var n = event.data.opt;
        switch(n) {
            case 1:
                // 1 reveal city
                $('#city_form').removeClass('hidden');
                //alert( "Reveal city" );
                break;
            case 2:
                // 2 reveal produce
                $('#prod_form').removeClass('hidden');
                //alert( "Reveal prod" );
                break;
            case 3:
                // 3 reveal all
                $('#city_form').removeClass('hidden');
                $('#prod_form').removeClass('hidden');
                alert( "Reveal all" );
                break;
        }    
    }

但是,我试图能够在不属于事件处理程序的其他函数中使用此函数。

function dev(){
        revealOption(3);
    }

我更愿意避免编写另一个功能来执行相同的任务,但很难发现它是否可能。

我在研究SO时发现的最接近的问题是function handle jQuery event and parameter?,但这涉及将事件对象传递给另一个函数,而不传递值。

任何帮助将不胜感激:)

3 个答案:

答案 0 :(得分:2)

您必须传递相同的对象

var evt = {
   data : {
      opt : 3
   }
}


function dev(){
   revealOption(evt);
}

或者更改函数以检查事件对象和整数或字符串或其他内容等。

function revealOption(event){
    var n = typeof event === 'object' ? event.data.opt : event;

然后你可以把它称为

revealOption(3)

如果您还想传递自定义对象,则必须检查对象的某些属性,该属性对于事件对象等是唯一的。

答案 1 :(得分:0)

我宁愿保持简单并将revealOption方法更改为接受选项。

function revealOption(n) {
    switch (n) {
        ...
    }
}

$('#country_choice').on('change', {
    opt: 1
}, function (event) {
    revealOption(event.data.opt);
});

function dev() {
    revealOption(3);
}

答案 2 :(得分:0)

或者只是使用三元运算符来检查这个

 var n = (event.data && event.data.opt) ? event.data.opt : event;