如何增加 jQuery 变量?
How to increment jQuery variable?
我正在尝试使用 jquery 浏览图片库,所以我有一个按钮,它应该将变量递增 1,然后使用它加载下一张图片。
使用 this SO 问题的最佳答案,我认为这将是解决方案:
<div id="pic"></div>
<div id="browse-right">NEXT</div>
<%= image_tag("/1.JPG", id:"1") %>
<%= image_tag("/2.JPG", id:"2") %>
<%= image_tag("/3.JPG", id:"3") %>
$("#1").click(function() {
var x = 1;
$("#pic").html('<img src="/' + x + '.JPG" />');
});
$("#2").click(function() {
var x = 2;
$("#pic").html('<img src="/' + x + '.JPG" />');
});
$("#3").click(function() {
var x = 3;
$("#pic").html('<img src="/' + x + '.JPG" />');
});
//...
$("#browse-right").click(function() {
x = x + 1;
$("#pic").html('<img src="/' + x + '.JPG" />');
});
但它只是重新加载相同的图片,这意味着 var x
没有改变。有人知道正确的语法吗?
更新:好的,我想我已经解决了问题。 x
在点击图片时设置,显然在功能完成后它不会持久存在。我没有将那部分包含在原始代码中,因为我认为这会使整个事情变得更难阅读……吸取了教训。我怎样才能让 x
在它设置的函数后继续存在?
你的代码看起来没问题。这是一个工作版本 https://jsfiddle.net/a50nz178/1/
您可以检查几件事:
- 检查图像是否确实存在
/1.JPG
- 检查图像是否全部命名为
jpg
全部小写?
如果我不得不猜测的话,看看你的以前的 你已经更新了。事实证明我是对的。您的 x
超出范围。 正确的代码,我敢打赌您的问题是 范围 。 Scope Tutorial
我敢打赌,您在代码的其他地方使用了类似 for(x in ; ...
的东西,它正在重新分配 x
。如果不是这种情况,我仍然会在任何一个示波器上打赌,或者图像 src
不正确。您应该使用您的开发人员控制台来检查是否正在提取错误的图像源。您在 img src
的开头使用 /
,这将返回到 base path
。如果图像位于图像文件夹中,则需要包含正确的目录路径。
您可以通过将增量变量附加到元素对象来轻松缩短此范围:
$("#browse-right").click(function(e) {
// the following is a simple inline `if` statement
// what it says is (this is your element)
// if this.i does not exist, create it equal to one,
// else count it up once
!this['i'] ? this.i=1: this.i++;
$("#pic").html('<img src="/' + this.i + '.JPG" />');
// the following simply shows what `i` currently is
$('h3').text(this.i);
});
p { cursor: pointer; background: #aabb00; padding: 1em .5em; text-align: center; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<p id="browse-right">Browse Right</p>
<h3></h3>
<div id="pic">
IMG HERE
</div>
How can I get x to persist after the function it is set in?
尝试在 click
处理程序
之外和之前定义 x
var x = 1;
$("body").on("click", function() {
x = x + 1;
$(this).html(x)
})
body {
width: 300px;
height: 300px;
border: 1px solid purple;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
click
我正在尝试使用 jquery 浏览图片库,所以我有一个按钮,它应该将变量递增 1,然后使用它加载下一张图片。
使用 this SO 问题的最佳答案,我认为这将是解决方案:
<div id="pic"></div>
<div id="browse-right">NEXT</div>
<%= image_tag("/1.JPG", id:"1") %>
<%= image_tag("/2.JPG", id:"2") %>
<%= image_tag("/3.JPG", id:"3") %>
$("#1").click(function() {
var x = 1;
$("#pic").html('<img src="/' + x + '.JPG" />');
});
$("#2").click(function() {
var x = 2;
$("#pic").html('<img src="/' + x + '.JPG" />');
});
$("#3").click(function() {
var x = 3;
$("#pic").html('<img src="/' + x + '.JPG" />');
});
//...
$("#browse-right").click(function() {
x = x + 1;
$("#pic").html('<img src="/' + x + '.JPG" />');
});
但它只是重新加载相同的图片,这意味着 var x
没有改变。有人知道正确的语法吗?
更新:好的,我想我已经解决了问题。 x
在点击图片时设置,显然在功能完成后它不会持久存在。我没有将那部分包含在原始代码中,因为我认为这会使整个事情变得更难阅读……吸取了教训。我怎样才能让 x
在它设置的函数后继续存在?
你的代码看起来没问题。这是一个工作版本 https://jsfiddle.net/a50nz178/1/
您可以检查几件事:
- 检查图像是否确实存在
/1.JPG
- 检查图像是否全部命名为
jpg
全部小写?
如果我不得不猜测的话,看看你的以前的 你已经更新了。事实证明我是对的。您的 x
超出范围。 正确的代码,我敢打赌您的问题是 范围 。 Scope Tutorial
我敢打赌,您在代码的其他地方使用了类似 for(x in ; ...
的东西,它正在重新分配 x
。如果不是这种情况,我仍然会在任何一个示波器上打赌,或者图像 src
不正确。您应该使用您的开发人员控制台来检查是否正在提取错误的图像源。您在 img src
的开头使用 /
,这将返回到 base path
。如果图像位于图像文件夹中,则需要包含正确的目录路径。
您可以通过将增量变量附加到元素对象来轻松缩短此范围:
$("#browse-right").click(function(e) {
// the following is a simple inline `if` statement
// what it says is (this is your element)
// if this.i does not exist, create it equal to one,
// else count it up once
!this['i'] ? this.i=1: this.i++;
$("#pic").html('<img src="/' + this.i + '.JPG" />');
// the following simply shows what `i` currently is
$('h3').text(this.i);
});
p { cursor: pointer; background: #aabb00; padding: 1em .5em; text-align: center; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<p id="browse-right">Browse Right</p>
<h3></h3>
<div id="pic">
IMG HERE
</div>
How can I get x to persist after the function it is set in?
尝试在 click
处理程序
x
var x = 1;
$("body").on("click", function() {
x = x + 1;
$(this).html(x)
})
body {
width: 300px;
height: 300px;
border: 1px solid purple;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
click