홈>
function plusOne()
를 정의했습니다
변수에 +1을 더한 다음
innerHTML
를 설정해야합니다.
해당 변수가 될 요소). 함수가
button
일 때 호출됩니다.
클릭됩니다.
그러나 +1을 추가하면 한 번만 작동합니다. 버튼을 클릭 할 때마다 변수에 +1을 추가하려면 함수를 어떻게 변경해야합니까?
다음은 JSFiddle과 함께 내 함수와 HTML이 어떻게 보이는지 보여줍니다.
function plusOne() {
var number = 1;
var count = document.getElementById('count');
number++;
count.innerHTML = number;
}
<div>
<span id="count">1</span>
</div>
<div>
<button onclick="plusOne()">
+
</button>
</div>
JSFiddle에 연결 : https://jsfiddle.net/johschmoll/hLymhak7/1/
- 답변 # 1
- 답변 # 2
import { plusOne } from './plus-one'; describe('plusOne', () => { let countElement; let initialState; let state; beforeEach(() => { initialState = 1; state = initialState; countElement = { innerHTML: initialState.toString(), }; }) it('returns an incremented state', () => { state = plusOne(countElement, state); expect(state).toBe(initialState + 1); }); it('does not mutate the state', () => { plusOne(countElement, state); expect(state).toBe(initialState); }) it('reflects the state in the count element', () => { state = plusOne(countElement, state); expect(countElement.innerHTML).toEqual(state); }); });
- 답변 # 3
// Keeping state in DOM is NOT recommended, but here we go... var count = document.getElementById('count'); function plusOne() { var number = Number(count.innerHTML); number++; count.innerHTML = number.toString(); }
<!-- Using inline js--> <div> <span id="count">1</span> </div> <div> <button onclick="document.getElementById('count').innerHTML++"> + </button> </div>
function plusOne(){ var count = document.getElementById('count'); count.innerHTML++ }
관련 자료
- javascript - 버튼 클릭 기능이 HTML 변수에서 작동하지 않습니다 | 어떻게 고칠까요?
- r - Shiny에서 버튼 클릭 후 입력을 변수에 저장하는 방법은 무엇입니까?
- web scraping - Lua에게 "로드 중 버튼"을 무한히 클릭하도록 지시하는 방법은 무엇입니까?
- python - 의도 한 버튼 클릭시 PyQt5 버튼 클릭 이벤트가 발생하지 않음
- python 2.7 - 로그인 버튼 클릭 방법
- python - Selenium으로 버튼을 클릭 할 수 없음
- svelte의 자바 스크립트에서 버튼 클릭시 비동기 함수를 호출하는 방법은 무엇입니까?
- C # 버튼 클릭, 이미지 표시 후 종료
- 텍스트가 다른 것으로 변경 될 때 Selenium과 Python을 사용하여 버튼을 클릭하려면 어떻게해야합니까?
- reactjs - react/materialui - 버튼 클릭시 케이스 변경
- javascript - 버튼 클릭시 반응에서 변수 값을 변경하는 방법
- -selenium -python 클래스를 사용하여 버튼 검색을 클릭하십시오
- javascript - 추가 버튼을 클릭하면 입력 상자 값이있는 다른 라디오 버튼을 추가합니다
- javascript - 버튼 클릭으로 html 요소 그룹을 추가하는 방법
- arrays - 버튼 클릭으로 하나씩 여러 레이블 설정
- javascript - preventDefault가 실행되었지만 클릭 이벤트에서 라디오 버튼이 선택됩니다
- C #, 양식 앱 버튼 클릭으로 메서드 호출
- javascript - 버튼을 클릭 할 때 오류가 발생했습니다
- Android 스튜디오, 자바에서 클릭 할 때마다 버튼 텍스트 변경
- vue.js - Vue는 두 개의 입력 하나의 버튼을 클릭
관련 질문
- javascript : 브라우저에서 페이지 로드 시 오디오 자동 재생
- javascript : jQuery 인라인을 어떻게 사용합니까?
- javascript : [복제] 클릭 시 버튼 색상 전환
- javascript : 버튼 클릭으로 커서를 변경하는 방법
- javascript : TypeError: data.forEach는 함수가 아닙니다.
- javascript : .click 토글 기능을 어떻게 재설정합니까?
- javascript : HTML 전화번호 유효성 검사
- javascript : jquery를 사용하여 카테고리에 따라 관련 없는 div를 페이드 아웃하는 메뉴
- javascript : html, css, js로 onclick 이벤트를 어떻게 할 수 있습니까?
- javascript : codepen.io 프로필 이미지 업로드 JQuery가 작동하지 않음
최소 솔루션 : 상태 변수를 클릭 핸들러 범위 밖으로 이동
number
를 넣어 자바 스크립트를 변경 클릭 핸들러 외부의 변수 그렇지 않으면, 당신은number
를 재설정 클릭 핸들러가 호출 될 때마다 1로 변경됩니다.예 : https://jsfiddle.net/hLymhak7/6/
요소 참조를 클릭 핸들러 범위 밖으로 이동요소가 절대로 파괴되지 않으면 요소 참조를 클릭 핸들러 범위 밖으로 유지하는 것이 좋습니다.
DOM 쿼리 조회는 요즘 저렴하지만 많은 것들이 앱의 성능에 부정적인 영향을 미칩니다.
예 : https://jsfiddle.net/hLymhak7/8/
요소 의존성을 명시 적으로 만들어라우리도
자바 스크립트 HTMLcount
를 통과 할 수 있습니다 클릭 핸들러에 요소를 추가하여 쉽게 테스트 할 수 있습니다.와이즈 비즈 요소는 실제로
span
범위 내에있는 전역 변수에 지정됩니다. Wyzwyz와 같은 요소 클릭 핸들러. 이것은 모든 예에서button
를 쉽게 사용할 수 있음을 의미합니다. 또는plusOne
count
에 액세스 요소.예 : https://jsfiddle.net/hLymhak7/12/
모범 사례 : 이벤트 리스너로 추가window.count
를 사용하여 클릭 핸들러를 바인딩하지 않는 것이 좋습니다.span
의 속성 요소. 그 이유 중 하나는 우리가 오직 하나의onclick
를 추가 할 수 있다는 것입니다. 핸들러 (button
의 경우는 아님) .onclick에 대한 추가 토론보기
예 : https://jsfiddle.net/hLymhak7/13/
명시적인 요소 의존성을 가진 모범 사례 결합<div> <span id="count">1</span> </div> <div> <button id="incrementor"> + </button> </div>
도 전달하는 클릭 리스너를 추가 할 수 있습니다var number = 1; var count = document.getElementById('count'); var incrementor = document.getElementById('incrementor'); incrementor.addEventListener('click', plusOne); function plusOne() { number++; count.innerHTML = number; }
에 명시 적으로 요소 기능.이제 쉽게 테스트 할 수있는 유지 보수 가능한 코드에 한 걸음 더 다가 섰습니다.
예 : https://jsfiddle.net/hLymhak7/14/
유지 보수가 용이하고 쉽게 테스트 할 수있는 최종 솔루션두 번째 종속성, 즉
이 변수를plusOne
를 명시 적으로 지정하여 솔루션을 완성 할 수 있습니다. 상태 변수.var number = 1; var count = document.getElementById('count'); var incrementor = document.getElementById('incrementor'); incrementor.addEventListener('click', function onClick() { plusOne(count); }); function plusOne(count) { number++; count.innerHTML = number; }
에 전달할 때 함수, 이제 테스트하고 추론하기 쉬운 순수한 함수를 갖습니다. HTML 자바 스크립트이것이 더 장황하지만, 의존성이 명확하고 실제 비즈니스 로직, 즉
테스트 스위트<div> <span id="count">1</span> </div> <div> <button id="incrementor"> + </button> </div>
기능을 사용하여 별도의 파일로 추출 할 수 있으며 단위 테스트를 수행하여 해당 기능을 수행하는지 확인합니다.예 : https://jsfiddle.net/hLymhak7/15/
테스트 스위트 예 : https://stackblitz.com/edit/stack-overflow-javascript-jquery-repeatedly-add-1-to-variable-o?file=src%2Fplus-one.spec.ts
반 패턴 : DOM에서 상태 유지많은 웹 앱이 DOM의 상태를 유지합니다. 이 방법은 쉽고 코드에서 변경 가능한 상태는 아니지만 일반적으로 앱의 여러 위치에서 상태에 액세스하려고합니다.
필요한 모든 곳에서 DOM에서 상태를 추출해야한다고 생각되는 방식이 아닙니다. 비즈니스 로직을 JavaScript로 유지하고 DOM이 다른 방식이 아닌 상태를 반영하도록해야합니다.
또한 DOM에 긴밀하게 연결되어 유지 관리 및 테스트가 더 어려워집니다.
예 : https://jsfiddle.net/hLymhak7/9/