0
function turn(id, player) {
    let value = parseInt($('#' + id).attr('data-value'));
    showValue();
    id = parseInt(id);
    for (let i = 1; i <= value; i++) {
        let newId = id + i;
        setTimeout(function () {
            if (player == 'p1') {
                let value = parseInt($('#' + newId).attr('data-value'));
                if (newId == 14) {
                    let mainValue = parseInt($('#main-1').attr('data-value'));
                    $('#main-1').attr('data-value', mainValue + 1);
                    // i want to add i++; but nothing happen
                } else {
                    $('#' + newId).attr('data-value', value + 1);
                }
            } else {
                let value = parseInt($('#' + newId).attr('data-value'));
                if (newId == 7) {
                    let mainValue= parseInt($('#main-2').attr('data-value'));
                    $('#main-2').attr('data-value', mainValue + 1);
                    //here too
                } else {
                    $('#' + newId).attr('data-value', value + 1);
                }
            } showValue();
        }, i * 500);
    }
}

when i console.log the i in that spot, nothing happened. but when i change i outside setTimeout function, it works. how can i fix that?

zyen
  • 39
  • 2

2 Answers2

1

You should use setInterval instead of setTimeout in your case.

function turn(id, player) {
  let value = parseInt($("#" + id).attr("data-value"));
  showValue();
  id = parseInt(id);
  let i = 1;
  const timer = setInterval(function () {
    if (player == "p1") {
      let newId = id + i;
      let value = parseInt($("#" + newId).attr("data-value"));
      if (newId == 14) {
        let mainValue = parseInt($("#main-1").attr("data-value"));
        $("#main-1").attr("data-value", mainValue + 1);
        // i want to add i++; but nothing happen
      } else {
        $("#" + newId).attr("data-value", value + 1);
      }
    } else {
      let value = parseInt($("#" + newId).attr("data-value"));
      if (newId == 7) {
        let mainValue = parseInt($("#main-2").attr("data-value"));
        $("#main-2").attr("data-value", mainValue + 1);
        //here too
      } else {
        $("#" + newId).attr("data-value", value + 1);
      }
    }
    showValue();
    i++;
    if (i > value) {
      clearInterval(timer);
    }
  }, 500);
}
ikhvjs
  • 5,316
  • 2
  • 13
  • 36
-1
    function turn(id, player) {
    let value = parseInt($('#' + id).attr('data-value'));
    showValue();
    id = parseInt(id);
    let i = 1;
    for (i = 1; i <= value; i++) {
        let newId = id + i;
        setTimeout(function () {
            if (player == 'p1') {
                let value = parseInt($('#' + newId).attr('data-value'));
                if (newId == 14) {
                    let mainValue = parseInt($('#main-1').attr('data-value'));
                    $('#main-1').attr('data-value', mainValue + 1);
                     i++;
                } else {
                    $('#' + newId).attr('data-value', value + 1);
                }
            } else {
                let value = parseInt($('#' + newId).attr('data-value'));
                if (newId == 7) {
                    let mainValue= parseInt($('#main-2').attr('data-value'));
                    $('#main-2').attr('data-value', mainValue + 1);
                    i = i + 1
                } else {
                    $('#' + newId).attr('data-value', value + 1);
                }
            } showValue();
        }, i * 500);
    }
}

I think this here should work as it worked for me! Have a nice day :)

theRish17
  • 9
  • 2