我正在尝试获取页面上所有div宽度的总和,并在警告中单击显示
我面临的问题是当我再次点击按钮显示结果返回的总和加倍时,如果我第三次再次点击,结果返回三倍等等
我在jsfiddle中的代码http://jsfiddle.net/Jim_Toth/enypx/
HTML
<button>Size of all divs?</button><br>
<div style="width: 100px;">REMOVE</div>
<div style="width: 150px;">REMOVE</div>
<div style="width: 200px;">REMOVE</div>
<div style="width: 150px;">REMOVE</div>
<div style="width: 100px;">REMOVE</div>
jQuery的
var divs = 0;
$('button').click(function () {
$('div').each(function () {
divs += $(this).outerWidth(true);
});
alert(divs + 'px');
});
$('div').click(function () {
$(this).remove();
});
答案 0 :(得分:4)
在点击处理程序中,您需要重置divs
变量的值...也可以是局部变量
在您的情况下,divs
是一个全局变量,其初始值为0
,当您第一次将其更新为值x
时单击该按钮 - 现在是共享的值变量是x
。现在,当您再次单击该按钮而不是以值0
开头时,变量值将从x
开始。
$('button').click(function () {
var divs = 0;
$('div').each(function () {
divs += $(this).outerWidth(true);
});
alert(divs + 'px');
});
演示:Fiddle
答案 1 :(得分:2)
问题是存储宽度(divs
)的变量长于特定函数调用。将变量divs
移动到click函数中,如下所示:
$('button').click(function () {
var divs = 0;
$('div').each(function () {
divs += $(this).outerWidth(true);
});
alert(divs + 'px');
});
$('div').click(function () {
$(this).remove();
});
在函数内部移动变量会将变量生存的时间限制为函数执行的时间。请记住,您无权访问此函数的 变量。
答案 2 :(得分:0)
在关闭点击功能之前将var divs
重置为0
。
var divs = 0;
$('button').click(function () {
$('div').each(function () {
divs += $(this).outerWidth(true);
});
alert(divs + 'px');
divs = 0; // NOTE: reset divs. Value retains with every
// click otherwise.
});
$('div').click(function () {
$(this).remove();
});
答案 3 :(得分:0)
你必须在每次点击按钮上设置var divs=0;
var divs;
$('button').click(function () {
divs=0;
$('div').each(function () {
divs += $(this).outerWidth(true);
});
alert(divs + 'px');
});
$('div').click(function () {
$(this).remove();
});
答案 4 :(得分:0)