유연성 측면에서 여러 가지 측면을 고려했으며, 다양한 환경에서 사용하기 쉽도록 몇 가지 중요한 구성을 제공하며, 소스 코드도 완전히 공개되어 있습니다. 이 플러그인을 개발하게 된 이유는 얼마전 4단계 캐스케이딩 드롭다운 박스를 유지하면서 답답함을 느꼈고, 200줄의 코드와 복잡한 구조, 그 안에 들어있는 버그들로 인해 답답함을 느꼈기 때문입니다. 계단형 드롭다운 상자가 2~3개만 나타나기 때문에 코드가 많이 발생하는 것입니다. ), 실제로 이런 요구가 자주 발생하는 경우는 jquery에 이보다 더 좋은 플러그인이 없으므로 제가 직접 개발하는 편이 나을 것 같습니다. . 소스 코드는 복잡하지 않습니다. 조금 더 복잡한 부분은 두 번째 플러그인에서 캐시를 사용하는 부분이므로 나중에 설명하기가 매우 어렵습니다.
플러그인 1: 서버와 AJAX 상호 작용이 없을 때 사용하기에 적합합니다. 모든 드롭다운 상자 데이터를 미리 읽어야 합니다.
플러그인 2: 각 하위 드롭다운에 적합합니다. 데이터 바인딩을 위해 서버에 게시되는 상자입니다. 뛰어난 효율성을 달성하기 위해 사용된 데이터를 캐시한다는 점입니다. 참고: 캐시된 키 값은 상위 드롭다운 상자의 값일 뿐만 아니라 최상위 드롭다운 상자의 값 조합입니다. 현재 상위 드롭다운 상자입니다. 이는 동일한 상위 드롭다운 상자에 해당하는 하위 항목이 동일하지 않은 상황을 처리하기 위한 것입니다. 같은 이유로 포스트백을 통해 서버로 다시 전송되는 양식에는 모든 상위 드롭다운 상자의 값도 포함됩니다.
/*
* 계단식 드롭다운 상자 Jqueyr 플러그인, V1.2
* Copyright 2011, Leo.Liu
* 이 플러그인에는 새로 고침이 없는 계단식 드롭 2개가 포함되어 있습니다. -다운 박스 플러그인:
* 플러그인 1: cascadeDropDownData는 서버와 AJAX 상호 작용이 없을 때 사용되며 모든 드롭다운 박스 데이터를 미리 읽어야 합니다. 데모:
* 방법 1: var dataItem = [['all', '-1', '0'], ['a001', 'a001', '0'], ['a002', 'a002' , '0'], ['a003', 'a003', '0']
, ['b001', 'b001', 'a001'], ['b002', 'b002', 'a001'] , ['b003', 'b003', 'a002'], ['b004', 'b004', 'a003']
, ['c001', '001', 'b001'], ['c002' , '002', 'b001'], ['c003', '003', 'b002'], ['c004', '004', 'b003']]
$.cascadeDropDownBind.bind(dataItem, { sourceID: 'Select1', selectValue: 'a001', parentValue: '0',
child: { sourceID: 'Select2', selectValue: 'b002',
child: { sourceID: 'Select3', selectValue : 'c002'}
}
});
* 이 방법에는 결함이 있습니다. a) 드롭다운 상자의 값은 상위-하위 통신의 상위 값과 동일해서는 안 됩니다. b ) 모두 선택 규칙을 설정할 수 없습니다.
*
* 방법 2: var data = [['all', '0'], ['a001', 'a001'], ['a002', ' a002'], ['a003', 'a003' ]];
var data2 = [['all', '0', '0'], ['b001', 'b001', 'a001'], ['b002', 'b002', 'a001' ], ['b003', 'b003', 'a002'], ['b004', 'b004', 'a003']]
var data3 = [ ['모두', '0', '0' ], ['c001', '001', 'b001'], ['c002', '002', 'b001'], ['c003', '003' , 'b002'], ['c004', ' 004', 'b003']];
$.cascadeDropDownBind.bind(data, { sourceID: 'Select1', selectValue: 'a001' }); $.cascadeDropDownBind.bind(data2, { sourceID: ' Select2', selectValue: 'b002', parentID: 'Select1' })
$.cascadeDropDownBind.bind(data3, { sourceID: 'Select3', selectValue: ' c002', parentID: 'Select2' });
* 세 번째 방법은 cascadeDropDownBind.bind
*/
jQuery.extend({
//드롭의 데이터 개체를 참조하세요. -down box
cascadeDropDownData: function () {
//*** ***구성 속성************
this.removeFirst = true; 첫 번째 항목 제거
this.appentAllValue = ''; //상위 항목의 값이 이 값과 같은 경우 모든 항목 표시
this.sourceID = '' //이 드롭다운 상자 ID
this.parentID = ''; //상위 드롭다운 상자 ID
this.items = []; //항목 데이터, 2차원 배열, 형식: [['text', 'value', 'parent ID'],...]; 값과 상위 ID는 생략 가능
this.selectValue = ''; //선택한 항목을 초기화합니다.
this.parentValue = null; 일반적으로 첫 번째 드롭다운 상자를 바인딩하는 데 사용되는 데이터 더미에서 그룹에 필요한 항목
//**** **구성 속성*******
//다음은 다음과 같습니다. 전역 변수는 외부에서 설정할 필요가 없습니다.
this.child = null
var currentDrop = null
this.bind = function() {
currentDrop = $('#' this.sourceID );
this.clear();
//데이터 항목 채우기
this.fillItem()
//선택한 항목 설정
if (this.selectValue) {
currentDrop .val(this.selectValue);
}
//상위 드롭다운 상자의 변경 이벤트 설정
this.setChange()
}//채워진 항목 지우기 items
this.clear = function () {
if (this.removeFirst) {
currentDrop.empty()
} else {
for (var i = currentDrop[0]. options.length - 1; i--) {
currentDrop[0].options[i] = null
}
}; 데이터 항목
this.fillItem = function () {
var _parentValue = this.parentValue;
if (this.parentID)
_parentValue = $( '#' this.parentID).val() ;
var all = false; if (this.appentAllValue && _parentValue == this.appentAllValue)
all = true;
var val = item.length > 1 ? item[1] : item[0]; //값을 지정하지 않으면 대신 텍스트를 사용합니다.
if (all || item.length currentDrop.append('');
}
})
}//상위 드롭의 변경 이벤트를 설정합니다. -다운 박스
this.setChange = function () {
if (this.parentID) {
$('#' this.parentID).bind('change', this.change); >}
} ;
//상위 드롭다운 상자 이벤트 콜백 함수
var _this =
this.change = function () {
_this.clear(); >_this.fillItem();
currentDrop.change();
},
cascadeDropDownBind: {
bind: 함수(데이터, 설정) {
var obj = new $.cascadeDropDownData(); $.extend(obj, 설정);
obj.items = data;
obj.bind()
if (setting.child) settings.child.parentID = 설정.sourceID
this.bind(data, settings.child)
}
}
}
}); 플러그인 2: ajaxDropDownData는 데이터 바인딩을 위해 서버에 게시되는 각 하위 레벨 드롭다운 상자에 적용됩니다.
* 이 플러그인의 가장 큰 장점은 사용된 데이터를 캐시하여 높은 효율성을 달성한다는 것입니다.
* 참고: 캐시된 키 값은 상위 드롭다운 상자의 값뿐만 아니라 최상위 드롭다운 상자에서 현재 상위 드롭다운 상자까지의 값 조합을 처리하기 위한 것입니다. 동일한 상위 드롭다운 상자에 해당하는 다른 하위 항목이 발생합니다.
* 같은 이유로 포스트백에서 서버로 다시 전송되는 양식에는 모든 상위 드롭다운 상자의 값도 포함됩니다.
* 사용법:
var firstItems = null; //첫 번째 항목을 넣을 수도 있습니다. 드롭다운 상자의 데이터 배열은 바인딩을 위해 여기에 배치되거나 비어 있도록 설정되며 드롭다운 상자는 변경되지 않습니다.
$.ajaxDropDownBind.bindTopDrop('Select1', firstItems, null, false, 'Select2')
$.ajaxDropDownBind.bindCallback('Select2', null, false, 'Select3', 'http:// localhost:4167/GetDropDownData.ashx?action=select1')
$.ajaxDropDownBind.bindCallback('Select3', null, false, null, 'http://localhost:4167/GetDropDownData.ashx?action=select2' );
$('#Select1').change();
* 가장 중요한 것은 계단식 ID 설정이 빠질 수 없다는 것입니다. 고급 사용법은 $.ajaxDropDownBind.bindCallback 메소드를 참조하세요.
*/
jQuery.extend({
//이 객체는 연결 목록 구조입니다
ajaxDropDownData: function () {
//******구성 속성************
this.sourceID = ''; //이 드롭다운 상자 ID
this.items = [] //데이터 이 항목의 2차원 배열, 형식: [['Text', 'Value', 'Parent ID'],...]; 값과 상위 ID는 생략 가능
this.callback = null / /Callback 함수는 다음 A의 첫 번째 수준 메서드를 얻는 데 사용됩니다. 이 함수는 두 개의 매개 변수를 받습니다. value와 dropdownlist는 각각 상위 드롭다운 상자와 자체 인스턴스에서 선택한 값을 나타냅니다.
this.childID = ''; //관련 자식 컨트롤 ID
this.removeFirst = true; //이 항목의 첫 번째 옵션을 제거할지 여부
this.selectValue = ''; //이 항목의 선택된 값을 초기화합니다.
// ******구성 속성**** ***
//**********************다음은 시스템 변수 및 메소드입니다. ****************** ******************************** ****
this.childItem = []; //캐싱을 위한 하위 객체 목록
this.parentObj = null; //상위 객체
this.canChange =
this.clearItem = true;
this.bind = 함수() {
$.ajaxDropDownBind.bindData(this)
};
this.bindData = 함수(설정) {
$.extend(this , 설정);
$.ajaxDropDownBind.bindData(this);
}/*루트 노드로 돌아가서 현재 올바른 드롭다운 상자 개체를 가져옵니다. 캐스케이드
드롭다운 상자의 이벤트는 하나뿐이고 해당 개체는 여러 개 있으므로 여기에서는 먼저 루트로 돌아가서 루트에서 시작해야 합니다
*/
this .getRightOnChangeObj = function () {
if (this.parentObj)
return this.parentObj.getRightOnChangeObj().childItem[$('#' this.parentObj.sourceID).val()] //재귀
else
return this;
}
},
ajaxDropDownBind: {
currentDrop: null,
_thisData: null,
callbackPool: [],
// 채워진 항목 지우기
clear: function () {
if (_thisData.removeFirst) {
currentDrop.empty()
} else {
for (var i = currentDrop[0 ].options.length - 1; i > 0; i-) {
currentDrop[0].options[i] = null;
}
/ /채우기 데이터 항목
fillItem: function () {
for (var i = 0; i var val = _thisData.items[i].length > ; 1 ? _thisData.items[i][1] : _thisData.items[i][0]; //값이 지정되지 않은 경우 대신 텍스트를 사용하세요.
currentDrop.append('
코드 복사

실제 세계에서 JavaScript의 응용 프로그램에는 프론트 엔드 및 백엔드 개발이 포함됩니다. 1) DOM 운영 및 이벤트 처리와 관련된 TODO 목록 응용 프로그램을 구축하여 프론트 엔드 애플리케이션을 표시합니다. 2) Node.js를 통해 RESTFULAPI를 구축하고 Express를 통해 백엔드 응용 프로그램을 시연하십시오.

웹 개발에서 JavaScript의 주요 용도에는 클라이언트 상호 작용, 양식 검증 및 비동기 통신이 포함됩니다. 1) DOM 운영을 통한 동적 컨텐츠 업데이트 및 사용자 상호 작용; 2) 사용자가 사용자 경험을 향상시키기 위해 데이터를 제출하기 전에 클라이언트 확인이 수행됩니다. 3) 서버와의 진실한 통신은 Ajax 기술을 통해 달성됩니다.

보다 효율적인 코드를 작성하고 성능 병목 현상 및 최적화 전략을 이해하는 데 도움이되기 때문에 JavaScript 엔진이 내부적으로 작동하는 방식을 이해하는 것은 개발자에게 중요합니다. 1) 엔진의 워크 플로에는 구문 분석, 컴파일 및 실행; 2) 실행 프로세스 중에 엔진은 인라인 캐시 및 숨겨진 클래스와 같은 동적 최적화를 수행합니다. 3) 모범 사례에는 글로벌 변수를 피하고 루프 최적화, Const 및 Lets 사용 및 과도한 폐쇄 사용을 피하는 것이 포함됩니다.

Python은 부드러운 학습 곡선과 간결한 구문으로 초보자에게 더 적합합니다. JavaScript는 가파른 학습 곡선과 유연한 구문으로 프론트 엔드 개발에 적합합니다. 1. Python Syntax는 직관적이며 데이터 과학 및 백엔드 개발에 적합합니다. 2. JavaScript는 유연하며 프론트 엔드 및 서버 측 프로그래밍에서 널리 사용됩니다.

Python과 JavaScript는 커뮤니티, 라이브러리 및 리소스 측면에서 고유 한 장점과 단점이 있습니다. 1) Python 커뮤니티는 친절하고 초보자에게 적합하지만 프론트 엔드 개발 리소스는 JavaScript만큼 풍부하지 않습니다. 2) Python은 데이터 과학 및 기계 학습 라이브러리에서 강력하며 JavaScript는 프론트 엔드 개발 라이브러리 및 프레임 워크에서 더 좋습니다. 3) 둘 다 풍부한 학습 리소스를 가지고 있지만 Python은 공식 문서로 시작하는 데 적합하지만 JavaScript는 MDNWebDocs에서 더 좋습니다. 선택은 프로젝트 요구와 개인적인 이익을 기반으로해야합니다.

C/C에서 JavaScript로 전환하려면 동적 타이핑, 쓰레기 수집 및 비동기 프로그래밍으로 적응해야합니다. 1) C/C는 수동 메모리 관리가 필요한 정적으로 입력 한 언어이며 JavaScript는 동적으로 입력하고 쓰레기 수집이 자동으로 처리됩니다. 2) C/C를 기계 코드로 컴파일 해야하는 반면 JavaScript는 해석 된 언어입니다. 3) JavaScript는 폐쇄, 프로토 타입 체인 및 약속과 같은 개념을 소개하여 유연성과 비동기 프로그래밍 기능을 향상시킵니다.

각각의 엔진의 구현 원리 및 최적화 전략이 다르기 때문에 JavaScript 엔진은 JavaScript 코드를 구문 분석하고 실행할 때 다른 영향을 미칩니다. 1. 어휘 분석 : 소스 코드를 어휘 단위로 변환합니다. 2. 문법 분석 : 추상 구문 트리를 생성합니다. 3. 최적화 및 컴파일 : JIT 컴파일러를 통해 기계 코드를 생성합니다. 4. 실행 : 기계 코드를 실행하십시오. V8 엔진은 즉각적인 컴파일 및 숨겨진 클래스를 통해 최적화하여 Spidermonkey는 유형 추론 시스템을 사용하여 동일한 코드에서 성능이 다른 성능을 제공합니다.

실제 세계에서 JavaScript의 응용 프로그램에는 서버 측 프로그래밍, 모바일 애플리케이션 개발 및 사물 인터넷 제어가 포함됩니다. 1. 서버 측 프로그래밍은 Node.js를 통해 실현되며 동시 요청 처리에 적합합니다. 2. 모바일 애플리케이션 개발은 재교육을 통해 수행되며 크로스 플랫폼 배포를 지원합니다. 3. Johnny-Five 라이브러리를 통한 IoT 장치 제어에 사용되며 하드웨어 상호 작용에 적합합니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

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

Dreamweaver Mac版
시각적 웹 개발 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기
