2017-07-18 126 views
1

我试图调用已经与事件侦听器一起使用的函数。JQuery将值传递给函数接受事件对象参数

比如我把我的事件侦听器:

$('#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?,但是这涉及将事件对象传递给另一个函数,而不传递一个值。

任何帮助将感激地赞赏:)

+1

这就是为什么添加自定义数据到事件的一个很好的例子几乎是一个反模式。我建议重构你的代码,以便直接传递参数给函数,例如'function revealOption(opt)'。为事件处理函数提供函数引用是JS提供的一些很好的语法糖,但是当需要更改该函数的作用域时,可以快速将自己绑定在节点上。 –

回答

2

你不得不要么通过同一个对象

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


function dev(){ 
    revealOption(evt); 
} 

或改变功能来检查这两个事件对象和整数或字符串或别的东西等

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

然后,你可以把它作为

revealOption(3) 

如果你想通过自定义对象的,你必须检查对象的某些属性所特有的事件对象等

+0

谢谢你所有的答案,每个答案都很好,但接受了我最终使用的答案。 –

0

我宁愿保持它的简单和改变revealOption方法接受选择。

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

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

function dev() { 
    revealOption(3); 
} 
0

要不干脆用三元运营商咨询是否喜欢这个

var n = (event.data && event.data.opt) ? event.data.opt : event; 
相关问题