我的javascript文件中有一个函数:
function hoverWidgetOn (param, value) {
var element = $("*[data-label]"),
config = {
'display':'inline',
'position':'absolute',
'top':'6.5em',
'padding' : '0.5em',
'background-color':'#383838',
'color':'white',
'font-size' : '0.8em',
'opacity' : '0.9',
'param' : 'value'
},
label = $(this).attr("data-label"),
d = document.createElement('span'),
t = document.createTextNode(label);
d.className = "labelShow";
$(this).append(d);
$('.labelShow').append(t).css(config);
}
我想要它做的是在调用函数
时为我的变量config添加param和valueelement.on('mouseenter', hoverWidgetOn('background-color', 'red'))
所以这个应用程序的用户不必更改我的javascript文件,以便在其他javascript文件中调用此函数时更改标签的外观,但无论我如何尝试,这都行不通...我会如果有人能帮助我,我会很高兴。
答案 0 :(得分:3)
当你这样做时:
element.on('mouseenter', hoverWidgetOn('background-color', 'red'))
hoverWidgetOn
立即被召唤。
你可以这样做:
element.on('mouseenter', function() {
hoverWidgetOn.call(this, 'background-color', 'red')
});
在匿名函数中包装将传递函数而不是执行它,使用call
可以保留this
的上下文。
答案 1 :(得分:2)
您可以修改函数以将param和value作为参数,并返回一个函数,该函数将对mousenter事件进行实际更改。
function hoverWidgetOn (param, value){
return function() {
var element = $("*[data-label]");
var config = {'display':'inline',
'position':'absolute',
'top':'6.5em',
'padding' : '0.5em',
'background-color':'#383838',
'color':'white',
'font-size' : '0.8em',
'opacity' : '0.9'};
config[param] = value; //add your param
var label = $(this).attr("data-label"),
d = document.createElement('span');
d.className = "labelShow";
var t = document.createTextNode(label);
$(this).append(d);
$('.labelShow').append(t).css(config);
};
}
答案 2 :(得分:1)
您只能使用您获得的语法传递函数引用。要传递变量,您需要将调用包装在另一个函数中。您可以使用$.proxy
来维护该函数中的范围。试试这个:
element.on('mouseenter', function() {
$.proxy(hoverWidgetOn('background-color', 'red')), this);
});
此外,要向config
对象添加动态键/值,您需要使用数组表示法。事实上,你在该函数中有一个奇怪的jQuery和JS组合。试试这个:
function hoverWidgetOn (param, value){
var element = $("*[data-label]");
var config = {
'display': 'inline',
'position': 'absolute',
'top': '6.5em',
'padding' : '0.5em',
'background-color': '#383838',
'color': 'white',
'font-size': '0.8em',
'opacity': '0.9'
};
config[param] = value;
var label = $(this).attr("data-label"),
$span = $('<span />', {
class = 'labelShow',
text = label
}).css(config);
答案 3 :(得分:0)
由于你正在使用jQuery,你可以将自定义对象传递给函数,如下所示:
element.on('mouseenter', {param: 'background-color', value: 'red'}, hoverWidgetOn);
然后访问此数据:
function hoverWidgetOn(e) {
var param = e.data.param;
var value = e.data.value;
(...)
}
修改强>:
我的回答为其他答案引入了非常类似的解决方案(如果不一样),所以我提出了另一种方法。