jQuery .on() 不使用字符串变量作为键

jQuery .on() not working with string variable as key

本文关键字:变量 字符串 on jQuery      更新时间:2023-09-26

我正在尝试使用字符串变量作为jQuery .on()对象的键。

我写了一个jsfiddle来说明这个问题:http://jsfiddle.net/KHPUV/

我知道这可能不是专门针对 jQuery 的问题,而是与一般变量的使用有关,但是实现我想要做的事情的最佳方法是什么?(使用字符串变量作为键)。

在以下示例中,单击不起作用,但mouseovermouseout起作用:

var responseEvent = 'click';
$('#el').on({
    'mouseover'        : mouseOver,
    'mouseout'         : mouseOut,
    responseEvent      : mouseClick
 });

这是不可能的。但是,您可以单独创建对象并将其作为参数传递给.on() ;

var responseEvent = 'click',
    props = {
        'mouseover': mouseOver,
        'mouseout' : mouseOut
    };
props[responseEvent] = mouseClick;
$('#el').on(props);
这是

行不通的,因为Javascript将responseEvent解释为传递给.on()的对象中的键名,而不是变量。考虑一下:

var str = 'key3';
var o1 = {
    'key1': 'value1'
    'key2': 'value2'
    str: 'value3'
};

现在 o1.key1 == 'value1',正如预期的那样。但是 o1.str == 'value3',而不是 o1.key3 == 'value3'。

如果需要,可以按如下方式构建事件对象

var eventObjects = {};
var responseEvent = 'click';
eventObjects[responseEvent] = function(evt){...};
eventObjects['mouseover'] = function(evt){...};
$('#el').on(eventObjects);

带有 [] 的表示法是访问 javascript 对象属性的另一种方法,它允许变量名称。