【问题标题】:Javascript (Jquery), increment/decrement ++/-- operator calculates wrongJavascript (Jquery),递增/递减 ++/-- 运算符计算错误
【发布时间】:2015-08-11 11:24:42
【问题描述】:

我正在制作带有两个左右按钮的幻灯片,当单击按钮时,图像src 会发生变化并出现新图像。图像的位置存储在一个数组中,++ 运算符用于移动下一张照片,-- 用于上一张有时它不起作用我必须双击按钮才能工作。为什么会这样?


HTML

<div class="row">
        <div class="col-xs-1">
            <a href="" id="left"><img src="images/left.png" width="80px"    height="80px"></a>
        </div>
        <div class="col-xs-6">
            <img src="images/1.jpg" id="image">
        </div>
        <div class="col-xs-1">
            <a href="" id="right"><img src="images/right.png" width="80px"  height="80px"></a>
        </div>
    </div>

jQuery

var count = 1;

        var imagesLocation = ['images/1.jpg',
                              'images/2.jpg',
                              'images/3.jpg',
                              'images/4.jpg',
                              'images/5.jpg'];

        $('#right').on('click',function(e){
            e.preventDefault();
            if(count < 6){
                $('#image').attr('src',imagesLocation[count]);
                count++;
            }
        });

        $('#left').on('click',function(e){
            e.preventDefault();
            count--;
            $('#image').attr('src',imagesLocation[count]);

        });

【问题讨论】:

  • javascript 数组索引从 0 开始

标签: javascript jquery increment


【解决方案1】:

数组索引从0 开始,而不是1

var count = 0;
//----------^--- update here

var imagesLocation = ['images/1.jpg',
  'images/2.jpg',
  'images/3.jpg',
  'images/4.jpg',
  'images/5.jpg'
];

$('#right').on('click', function(e) {
  e.preventDefault();
  if (count < imagesLocation.length) {
    //--------^----- .length can be use instead, so this will work even if array size changed
    $('#image').attr('src', imagesLocation[++count]);
    //-------------------------------------^--  ++count will increment the count, then returns the incremented count value    
  }
});

$('#left').on('click', function(e) {
  e.preventDefault();
  if (count > 0) {
    //------^---- to avoid negative index    
    $('#image').attr('src', imagesLocation[--count]);
    //-------------------------------------^--  --count will decrements the count, then returns the decremented count value
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="row">
  <div class="col-xs-1">
    <a href="" id="left">
      <img src="images/left.png" width="80px" height="80px">
    </a>
  </div>
  <div class="col-xs-6">
    <img src="images/1.jpg" id="image">
  </div>
  <div class="col-xs-1">
    <a href="" id="right">
      <img src="images/right.png" width="80px" height="80px">
    </a>
  </div>
</div>

【讨论】:

  • 另外一个问题是,左边的点击次数足够多,count可能会占用负值,并且不能作为数组索引,直到恢复为0。
  • 另外你为什么不建议使用.length属性?
  • 我还是要双击,因为计数设置为 0
  • @amguruprasath :最初在您的右键单击count 值在更改图像后递增,这就是为什么它仅在第二次单击后才更改图像
【解决方案2】:

试试这个...

    var count = 0;

    var imagesLocation =      ['images/1.jpg','images/2.jpg','images/3.jpg','images/4.jpg','images/5.jpg'];

    $('#right').on('click', function(e) {
      e.preventDefault();
      if (count < 5) {
    $('#image').attr('src', imagesLocation[count]);
     count++;
     }
    });

    $('#left').on('click', function(e) {
      e.preventDefault();
      count--;
    $('#image').attr('src', imagesLocation[count]);

    });

数组索引从0开始...

【讨论】:

  • Count 设置为 1,因为我将图像放置在 0 已经显示的位置,如果再次设置为零,我必须双击
猜你喜欢
  • 2011-02-16
  • 1970-01-01
  • 2015-10-03
  • 2014-03-21
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多