일관되고 깨끗하며 전문적인 스핀박스를 만드는 것이 HTML에서 간단한 작업이라고 생각할 수도 있습니다... 하지만 안타깝게도 입력에 정수 또는 소수 값만 허용해야 한다고 알려주는 표준 속성이 없습니다. , 모든 입력 필터링은 JS여야 합니다. 아웃!
저는 Go, a-h/Templ, Tailwind 및 제가 사랑하는 Alpine.js를 사용하여 이 기능을 구현하여 삶을 편하게 만들 예정입니다.
정수 스핀박스에 대한 기본 템플릿을 작성하는 것부터 시작합니다.
templ IntSpinbox(name, label, value, tooltip string, saveinput bool, interval *IntInterval) { ... }
IntInterval을 다음과 같이 정의합니다.
type IntInterval struct { A, B int }
간격을 사용하여 입력의 최소값과 최대값을 설정합니다. 정수 스핀박스를 만들 때 단계는 항상 '1'로 설정됩니다.
templ IntSpinbox(name, label, value, tooltip string, saveinput bool, interval *IntInterval) { }
이제 두 개의 클래스를 추가해 보겠습니다. 다음은 입력 렌더링을 제어하는 몇 가지 특수 속성과 의사 요소입니다.
select-none [-moz-user-select:none] [-ms-user-select:none] [-o-user-select:none] [-webkit-user-select:none]
다음 추가 클래스는 기본 스피너 버튼을 제거하는 데 사용됩니다.
[&::-webkit-inner-spin-button]:[-webkit-appearance:none] [&::-webkit-outer-spin-button]:[-webkit-appearance:none] [-moz-appearance: 텍스트 필드]
마지막으로 기본 패딩, 링, 색상 등을 추가해 보겠습니다.
블록 w-전체 반올림-l-md py-2 px-2.5 텍스트-회색-900 링-1 링 삽입 링-회색-300 자리 표시자:텍스트-회색-400 포커스:개요-없음 포커스:링-2 포커스: ring-primary-400 bg-gray-50 sm:text-sm sm:leading-6
템플릿에 추가하면 다음과 같은 결과가 나타납니다.
templ IntSpinbox(name, label, value, tooltip string, saveinput bool, interval *IntInterval) { }
이제 입력 위에 마우스를 올리면 기본적인 유효성 검사가 포함된 텍스트와 유사한 입력을 받게 됩니다. 다음 섹션에서는 유효한 정수 입력을 확인하는 기능을 추가하겠습니다.
정수 스핀박스의 기본 아이디어는 만 정수를 허용하는 입력입니다. 처음에는 다음과 같이 HTML의 패턴 속성을 사용하여 이 기능을 구현하려고 시도했습니다.
패턴 속성은 정규식 문자열을 가져와 이를 사용하여 사용자 입력의 유효성을 검사하지만 처음부터 잘못된 입력이 입력되는 것을 방지하지는 않습니다. 실제로 이는 간단한 클라이언트측 검증을 위해 만들어졌습니다.'oninput' 이벤트
Alpine을 모르는 분들을 위해 여기서 $el은 현재 DOM 요소를 참조하는 데 사용됩니다.맞춤형 스피너
그런 다음 입력 뒤에 새 하위 항목을 추가합니다. 여기에는 버튼이 포함됩니다.
여기에서는 탭 순서를 올바르게 유지하는 쉬운 방법으로 flex-col-reverse를 사용합니다. 먼저 '-'로 탭한 다음 ''으로 탭해야 합니다.그런 다음 x-on:click을 사용하여 버튼에 이벤트 핸들러를 추가합니다. 전체 코드(CSS 제외)는 다음과 같습니다.
e.value와 e.step은 문자열이므로 연산을 수행하기 전에 변환해야 합니다.스피너 버튼용 CSS의 경우 입력과 매우 유사하게 스타일이 지정되며 전체 코드는 아래에 있습니다.
즐기다 :)
에서 작동
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3