입력입력창 자동 매칭(네이티브코드)_javascript 스킬
오늘 그룹의 누군가가 Renren.com에 몇 가지 인터뷰 질문을 게시했습니다. 이전에 그 중 일부를 다시 게시했기 때문에 수행할 질문을 선택하고 기술을 연습했습니다.
이 질문의 요구 사항은 다음과 같습니다:
1. 네이티브 코드를 사용하여 구현하며, 프레임워크를 사용할 수 없습니다.
2. 입력란 아래에 메뉴 형태로 표시됩니다.
3. 영어 문자만 일치하며, 메뉴에서 일치하는 내용이 굵게 표시됩니다.
4. 키보드의 위쪽 및 아래쪽 화살표를 통해 선택하고 Enter 키를 누른 다음 선택한 내용을 입력 상자에 씁니다.
Idea
입력 변경 사항을 캡처하고 사용자가 입력한 값을 사용합니다. (이하 입력값이라 함)을 목록 항목과 일치시키려면, 여기서는 목록 항목이 쿼리에 의해 반환된 배열(이하 목록이라고 함)이라고 가정합니다. 일치 방법은 입력값을 목록 항목으로 사용하는 것입니다. 각 목록 값과 일치하도록 시작 값을 지정하고, 필터링 조건에 맞는 항목을 페이지에 출력합니다.
분석
세 번째 요구사항의 키워드는 굵게 표시되어 있습니다. 여기서 정규식으로 바꾸시면 됩니다.
네 번째 항목은 더 많은 키워드가 필요합니다. 한 문장에 살인 의도가 많이 숨겨져 있습니다. 이 부분은 주로 키보드에 대한 것입니다. 그런 다음 Enter 키를 누르고 입력 상자에 씁니다.
이 시점에서 끝났다고 생각하면 너무 성급한 것입니다. 숨겨진 욕구가 4개 이상 있습니다.
•기본적으로 첫 번째 항목이 강조 표시되며, 상하 키를 누르면 현재 항목이 강조 표시됩니다.
•Enter를 누르면 첫 번째 항목이 기본적으로 선택됩니다.
•현재 항목 위로 마우스를 가져가면 강조 표시됩니다.
•선택한 항목 클릭을 지원합니다.
혹시 빠진 부분이 있을 수도 있으니 여기서는 걱정하지 않겠습니다.
연습
JS 문제이지만 먼저 페이지 구조를 작성해야 합니다.
프레임이 허용되지 않으므로 다음은 몇 가지 가능한 방법을 간단히 요약한 것입니다.
먼저 캡슐화 개체를 만들고 이름을 dom으로 지정한 다음 재사용을 위해 모든 기본 메서드를 이 개체에 넣습니다.
코드 복사
root = root ? root : document; makeArray( root .getElementsByTagName(tagName) );
},
bind : function( element,type,handler ){
if( document.addEventListener ){
element.addEventListener( type,handler, false );
}else if( document.attachEvent ){
element.attachEvent( 'on' type,handler )
},
removeClass : 함수( 목록, 이름) ){
var el = list[i],
r = new RegExp('\s*\b' 이름 '\b\s*','g');
for( var i = 0 , len = list.length ; i < len ; i ){
var cur = list[i]
if( r.test( cur.className ) ){
cur.className .className.replace(r,'');
};
},
height: function( element ){
return element.offsetHeight; 🎜>getBound : function( element ){
return element.getBoundingClientRect();
},
getText : function( element ){
return element.textContent : element.innerText;
},
trim : function( string ){
return string.replace( /^s*(.*)s*$/,'$1' )
},
makeArray : function( tagList ){
for( var i = 0 , arr = [] , len = tagList.length ; i < len ; i ){
arr.push( tagList[i] ); >};
return arr;
},
isVisible: function( element ){
return element.style.display == 'block'
}
>
그런 다음 특정 처리 로직을 저장할 객체를 생성합니다. 작성자의 영어 실력이 좋지 않으므로 autoMatch라고 부르겠습니다.
이 개체는 할 일이 많습니다:
•메뉴 위치 결정
•실시간으로 사용자 입력 처리
•마우스 및 키보드 키 입력 처리
메뉴 캡슐화된 객체 dom의 getBound 메소드를 사용하여 경계 객체를 반환합니다. 이 객체에는 left와 top의 두 가지 속성이 있습니다. 익숙해 보일 수 있으며 jQuery의 offset() 메서드와 유사합니다.
여기서 사용자 입력 처리에 대해 언급할 가치가 있습니다. 실시간 처리이기 때문에 onchange 이벤트 사용을 고려하기 시작했지만 포커스를 잃었을 때만 트리거되므로 무리입니다.
이때 제 눈은 그 일을 충분히 할 수 있는 oninput에 쏠렸습니다.
dom.bind( obj.input,' input' , this.inputProcess );
그런데 IE는 또 색다른 행동을 했습니다. 입력 입력을 지원하지 않습니다.
기쁨은 모두 헛된 것입니다!
모든 일에는 언제나 전환점이 있습니다. 구석에 있는 onpropertychange가 서서히 우리에게 다가오고 있습니다... 이는 oninput과 매우 유사하며 동일한 특성을 가지고 있습니다. 적어도 입력 입력 캡처 측면에서는 이것이 바로 제가 IE를 처리하는 데 사용합니다. 그리고 우리 모두는 그것을 사용하는 데 동의합니다.
다시 바인딩:
dom.bind ( obj.input,'propertychange' , this.inputProcess );
다음 단계는 위, 아래, Enter 키입니다. 해당 키 코드는 각각 38, 40, 13입니다. 주의할 점은 FF와 IE의 속성 이름이 다르다는 것입니다.
자세한 구현 세부정보는 데모를 참조하세요.
데모를 보려면 저를 클릭하세요
실제 비즈니스 시나리오에서는 사용자 입력에 대해 실시간 Ajax 쿼리가 수행될 수 있습니다. 문자를 입력할 때마다 쿼리가 발생합니다.
그러나 Ajax 요청을 너무 자주 보내는 것은 비용 효율적이지 않으며 응답 속도도 그러한 구현을 허용하지 않습니다.
내 생각은 사용자가 첫 번째 문자(요청 데이터 수는 일반적으로 제한되어 있으며 일반적으로 10개)를 입력하면 요청을 보내고 반환 값(이하 캐시라고 함)을 저장하는 것입니다.
캐시에서 첫 번째 문자를 필터링한 후의 사용자 입력은 문자를 입력할 때마다 정확도가 높아지고 캐시는 점점 작아집니다.
사용자가 삭제하고 다시 입력하면 위 단계를 반복합니다.
물론, 좀 더 복잡한 비즈니스 시나리오가 있을 가능성도 배제할 수 없습니다. 예를 들어, 매칭이 충분할 경우 사용자가 각 입력에 대해 10개의 데이터 옵션을 갖도록 해야 하며, 이에 따라 더 많은 판단이 필요합니다. 그리고 요청합니다.
따라서 구체적인 구현은 실제 비즈니스 시나리오에 따라 달라집니다.
이 글의 끝입니다. 읽어주셔서 감사드리며, 실제적인 의견도 환영합니다.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











준비 vuecreateexample을 사용하여 프로젝트를 생성합니다. 매개변수는 대략 다음과 같습니다. 기본 입력을 사용합니다. 기본 입력은 주로 값과 변경 시 동기화되어야 합니다. App.tsx는 다음과 같습니다: import{ref}from'vue';exportdefault{setup(){//username은 데이터 constusername=ref('Zhang San');//입력 상자가 변경되면 데이터 동기화 constonInput =;반환( )=>({

laravel 입력 숨겨진 필드를 구현하는 방법: 1. 블레이드 템플릿 파일을 찾아 엽니다. 2. 블레이드 템플릿에서 method_field 메서드를 사용하여 숨겨진 필드를 생성합니다. "{{ method_field('DELETE') }} ".

커서 없이 입력 상자를 클릭하는 방법: 1. 입력 상자의 초점을 확인합니다. 2. 브라우저 캐시를 삭제합니다. 4. JavaScript를 사용합니다. 6. 입력을 확인합니다. 7. JavaScript 코드를 디버그합니다. 8. 페이지의 다른 요소를 확인합니다. 9. 브라우저 호환성을 고려합니다.

숫자와 소수점 입력을 제한하기 위해 jQuery 입력 상자를 구현합니다. 웹 개발 시 숫자와 소수점만 입력하도록 제한하는 등 사용자가 입력 상자에 입력하는 내용을 제어해야 하는 경우가 종종 있습니다. 이 제한은 JavaScript 및 jQuery를 통해 달성할 수 있습니다. 다음은 jQuery를 사용하여 입력창에 숫자 및 소수점 입력을 제한하는 기능을 구현하는 방법을 소개합니다. 1. HTML 구조 먼저 HTML로 입력 상자를 만들어야 하며 코드는 다음과 같습니다.

Vue.js는 사용하기 쉽고 효율적이며 유연한 경량 JavaScript 프레임워크로 현재 가장 널리 사용되는 프런트엔드 프레임워크 중 하나입니다. Vue.js에서 입력 상자 바인딩 이벤트는 매우 일반적인 요구 사항입니다. 이 기사에서는 Vue 문서의 입력 상자 바인딩 이벤트를 자세히 소개합니다. 1. 기본 개념 Vue.js에서 입력 상자 바인딩 이벤트는 입력 상자의 값을 Vue 인스턴스의 데이터 객체에 바인딩하여 입력과 응답의 양방향 바인딩을 달성하는 것을 의미합니다. Vue.j에서

Vue는 반응형 데이터 바인딩 및 구성 요소 시스템을 핵심으로 하는 인기 있는 JavaScript 프런트 엔드 프레임워크입니다. Vue 애플리케이션에서 입력 상자는 가장 일반적으로 사용되는 UI 요소 중 하나입니다. 사용자가 텍스트를 입력하면 캐리지 리턴 이벤트를 수신하고 제출하기 전에 입력의 유효성을 검사하기를 바랍니다. 이번 글에서는 입력박스의 엔터 이벤트와 Vue 문서의 검증 기능 사용법을 소개하겠습니다. 1. Vue에서 입력 상자의 캐리지 리턴 이벤트 Vue에서 입력 상자의 캐리지 리턴 이벤트를 모니터링하는 것은 매우 간단합니다.

웹 애플리케이션이 개발되면서 레이블이 지정된 입력 상자가 점점 더 대중화되고 있습니다. 이러한 입력창을 통해 사용자는 보다 편리하게 데이터를 입력할 수 있으며, 입력된 데이터를 관리하고 검색할 수도 있습니다. Vue는 레이블이 지정된 입력 상자를 빠르게 구현하는 데 도움이 되는 매우 강력한 JavaScript 프레임워크입니다. 이 기사에서는 Vue를 사용하여 레이블이 있는 입력 상자를 구현하는 방법을 소개합니다. 1단계: Vue 인스턴스 만들기 먼저 페이지에 Vue 인스턴스를 만들어야 합니다. 코드는 다음과 같습니다. &l

Vue 개발에서 입력 상자 입력 길이 제한을 최적화하는 방법 소개: Vue 개발 프로세스에서 입력 상자 길이 제한은 일반적인 요구 사항입니다. 사용자가 입력 상자에 입력하는 문자 수를 제한하면 데이터 정확성을 유지하고 사용자 경험을 최적화하며 시스템 성능을 향상시키는 데 도움이 됩니다. 이 글에서는 Vue 개발 시 입력 상자의 입력 길이 제한을 최적화하여 더 나은 사용자 경험과 개발 효율성을 제공하는 방법을 소개합니다. 1. v-model 지시어를 사용하여 입력 상자 값을 바인딩합니다. Vue 개발에서는 일반적으로 v-model 지시어를 사용합니다.
