我尝试调用已经与事件侦听器一起使用的函数。
例如,我设置了我的事件监听器:
$('#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?,但这涉及将事件对象传递给另一个函数,而不传递值。
任何帮助将不胜感激:)
答案 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;