我不知道为什么我不能将.hover函数捕获的值赋给全局声明的变量。
这是我的jQuery代码:
jQuery(function($){
var receipt;
$("#cartItems tr.cItem").hover(
function()
{
$(this).addClass("highlight");
receipt = $(this).next().children().text();
console.log(receipt);
},
function()
{
$(this).removeClass("highlight");
}
);
console.log(receipt);
});
这是我的HTML:
<table id="cartItems">
<tr>
<td>Lp.</td><td>z:</td><td>na:</td><td>cena netto:</td>
</tr>
<tr class="cItem">
<td>ru</td><td>pl</td><td>16.00</td>
</tr>
<tr>
<td colspan="4">some simple text that should be assigned </td>
</tr>
</table>
第一个console.log(receipt)
(内部.hover
函数)工作正常,输出some simple text..
,第二个输出没有。
请帮忙。
谢谢大家的快速回复。你们都对.hover功能完全正确。我的错。但现在我有另一个相关的问题。 我需要这个值将它传递给这样调用的“qTip”插件:
$("#cartItems tr.cItem").qtip(
{
content: receipt,
show: 'mouseover',
hide: 'mouseout'
});
我应该以某种方式合并这些电话吗?
答案 0 :(得分:5)
对console.log的“第二次”调用实际上是第一次(它在文档准备就绪时发生),此时你的var没有被定义
答案 1 :(得分:3)
只有在调用悬停功能后,该值才会分配给receipt
。您在#cartItems tr.cItem
被悬停之前登录到控制台。
答案 2 :(得分:1)
正如其他人所提到的那样,您目前放置了console.log(receipt)
,receipt
尚未初始化。
如果您想将其更改为更有意义的内容,您可以:
var receipt; jQuery(function ($) { $("#cartItems tr.cItem").hover( function () { $(this).addClass("highlight"); receipt = $(this).next().children().text(); console.log(receipt); }, function () { $(this).removeClass("highlight"); }); }); function printConsole() { console.log(receipt); }
这是一个jsfiddle演示,显示了这一点。
注意当它第一次输出值为undefined
时,因为当页面首次加载时,悬停事件未被触发,因此变量未初始化。在您悬停并单击链接后,它现在有一个值。
答案 3 :(得分:1)
第二个console.log
就其在代码中的布局方式而言,在悬停之前发生,因此变量未定义。在您悬停后,它会正确记录下一个tr的子项的文本。这是一个jsfiddle,你的代码工作正常。 http://jsfiddle.net/63xKR/
答案 4 :(得分:1)
只有在实际悬停在元素上方时才会执行hover()函数。所以你写的基本上是:
var receipt = null;
var documentReady = someFunctionToBeExecutedLater(){ doesnt matter whats in here };
console.log(receipt);
如你所见,实际上没有人调用函数(documentReady()),因此收据将保持为空。