>source

아래 코드에서 메모의 값은 두 가지 방법으로 증가합니다.

  • ajax 호출 후 (color == white)가 참이면.
  • 또한 메모의 값은 eventListener를 클릭하여 증감 할 수 있습니다.
  • 내가 가진 문제는 클릭시 메모 값을 늘리면 (예 : 5로) ajax 호출 후 메모 값이 1로 변경된다는 것입니다.

        $(document).ready(function () {
               const minusButtonFw = document.getElementById('memo-minus');
               const plusButtonFw = document.getElementById('memo-plus');
               var memo = document.getElementById('memo');
               memo.val = memo.value;
               minusButtonFw.addEventListener('click', event => {
               const currentValue = Number(memo.value);
               memo.value = currentValue - 1;
               });
               plusButtonFw.addEventListener('click', event => {
               const currentValue = Number(memo.value);
               memo.value = currentValue + 1;
               });
            var ajax_call = function () {
                $.ajax({
                    type: "GET",
                    url: "test.php",
                    dataType: "html",
                    success: function (response) {
                        color = response;
                        console.log(color);
                        if (color == white) {
                            memo.val++;
                            memo.value = memo.val;
                        } else {
                            console.log("Color is not white");
                        }
                    }
                });
            }
            var interval = 30000;
            setInterval(ajax_call, interval);
        });
    
    

    • 답변 # 1

      페이지가로드 될 때 mem.val을 얻은 다음이 값을 30 초마다 늘리고 ajax로 메모 요소를 변경합니다.
      따라서 버튼을 클릭하면 memo.val 값 대신 마지막 변경에서 유지됩니다.

      이를 방지하려면 일정을 변경할 때마다 가장 최근 값을 확인해야합니다.

      if (color == white) {
          memo.value = Number(memo.value) + 1
      
      

    • 답변 # 2

      너의 success 함수 증가 memo.val . 그것을 변경 memo.value 그리고 당신은 괜찮을 것입니다 :

      function (response) {
        color = response;
        console.log(color);
        if (color == white) {
          memo.value = +memo.value+1;
        } else {
          console.log("Color is not white");
        }
      }
      
      

      단항 연산자 + 문자열 값을 memo.value 이전에 숫자로 1 추가됩니다.

    • 답변 # 3

      변화 memo.val = memo.value; ...에 let val = Number(memo.value) . 그런 다음 두 가지 함수를 만듭니다.

      function valIncrement() {
        val = val + 1;
        memo.value = val;
      }
      function valDecrement() {
        val = val - 1;
        memo.value = val;
      }
      
      

      너의 "click" 핸들러는이 두 함수로 대체되고 AJAX 호출에서 다음을 대체합니다.

      memo.val++;
      memo.value = memo.val;
      
      

      그것은 단지 valIncrement();

      사실 그 memo.value 동기화 상태를 유지해야합니다. val 전적으로 구현 세부 사항입니다. 전체 memo 요소는 AJAX 및 핸들러 모두와 관련이 없습니다. 그들의 의도는 값을 증가 및 감소시키는 것이며 memo.value 그 값과 동기화 상태를 유지하는 것은 그들이 알아야 할 것이 아닙니다. 단지 함수를 호출하여 증가 또는 감소하고 그 함수는 구현 세부 사항을 캡슐화해야합니다.

      BTW, 보너스 포인트의 경우 안전을 높이고 코드 중복을 줄이기 위해 닫을 수 있습니다.

      const [ valIncrement, valDecrement ] = function makeValKnobs() {
        let val = Number(memo.value);
        const f = (amt) => {
          val = val + amt;
          memo.value = val;
        };
        return [ f(1), f(-1) ];
      }
      
      

      지금 val 노브로만 변경할 수 있습니다. 이 접근 방식의 더 중요한 이점은 구현을 변경하려는 경우 (예를 들어, memo 요소와 값이 변경 될 때마다 값을 추출하므로 안전하게 대체 할 수 있습니다. memo 요소...

    • 답변 # 4

      변수를 업데이트하려면 클릭이 완료 될 때 ajax 메서드를 호출하여 잘못된 데이터를 방지 할 수 있습니다.

    관련 자료

  • 이전 mysql - OVER () 창에서 인접 값을 얻는 방법
  • 다음 UITextField 선택기 함수가 iOS Swift로 호출되지 않음