我正在尝试创建一个简单的工具提示函数(我正在尝试学习jQuery,所以请不要为此建议插件)。当我像这样写它时它起作用:
$('span.toolTip').hide();
function toolTip() {
$('.targetLink').mouseover(function() {
$('.toolTip').show().html('Hello there');
});
}
<span class='toolTip'></span>
<a href="#" class="targetLink">Hover over me</a>
但是当我尝试通过函数传递参数时,它不起作用:
$('span.toolTip').hide();
function toolTip(target, tooltip, message) {
var target = '.' + target;
$(target).mouseover(function() {
var tooltip = '.' + tooltip;
$(tooltip).show().html(message);
});
}
toolTip('targetLink', 'toolTip', 'Hello There');
<span class='toolTip'></span>
<a href="#" class="targetLink">Hover over me</a>
答案 0 :(得分:2)
您正在使用新的本地target
变量“隐藏”target
参数:
function toolTip(target, tooltip, message) {
// this target is not the same as the parameter target
var target = '.' + target;
只需删除var
,它就应该有效:
function toolTip(target, tooltip, message) {
target = '.' + target;
...
答案 1 :(得分:0)
你没有得到正确的.class
selector,因为变量是undefined
,它应该是:
function toolTip(target, tooltip, message) {
$('.' + target).mouseover(function() {
$('.' + tooltip).show().html(message);
});
}
目前您正在创建一个新变量...而不是正确的选择器。 You can test the updated/working version here
答案 2 :(得分:0)
您的代码无效,因为变量tooltip
未定义。
$(target).mouseover(function() {
var tooltip = '.' + tooltip;
alert(tooltip); //undefined
$(tooltip).show().html(message);
});
请参阅jsfiddle中的错误。
修改强>
正如@nick所说,你未定义,因为你正在使用var
中的关键字var tooltip
创建一个新的局部变量。因此,要修复此问题,请移除var
,您将获得外部变量(closure)。
在jsfiddle中查看正确的代码。
$(target).mouseover(function() {
tooltip = '.' + tooltip;
$(tooltip).show().html(message);
});