자바 스크립트 컨트롤이 첨부 된 위젯이 있습니다.
위젯 관리 페이지가로드 될 때 위젯이 있으면 컨트롤이 올바르게 작동합니다.
새 위젯을 추가하면 제대로 작동하지 않고 마크 업이 발생하지만 자바 스크립트 이벤트는 적용되지 않습니다.
새 위젯을 저장하면 양식이 다시로드 될 때 컨트롤이 올바르게 작성되어 작동합니다.
페이지를 새로 고치면 문제가 해결되지만 기존 위젯에만 해당됩니다. 새 위젯에는 여전히이 문제가 있습니다.
특히 다음과 같은 시점에서 선택 입력에서 selectize를 실행하고 있습니다.
- 문서 준비
- 아약스 컴플리트
원하는대로 각 이벤트에서 코드가 실행되는지 확인했지만 결과가 예상과 다릅니다.
다음은 문제를 보여주는 테스트 플러그인입니다.
https://gist.github.com/Tarendai/8466299
변환 할 수있는 모든 선택 요소와 함께 증가하는 카운터가 있음을 알 수 있습니다.
노트:
- 위젯 페이지가로드되면 JS 콘솔에서 카운터가 예상대로 증가하는 것을 볼 수 있습니다
- 새 위젯을 추가하면 코드가 실행되지만 found.length에서 0으로 표시되는 것처럼 실행할 수있는 선택 요소를 찾을 수 없습니다. 해당 유형의 모든 새 위젯은 선택 요소가있다
- select 요소에는이를 식별하는 클래스가 있습니다.이 클래스는 selectize 라이브러리가 적용되면 기존 위젯에서 중복 및 재 처리를 방지하기 위해 제거됩니다.
- selectize를 사용하기 전에 동일한 문제가있는 Select2를 사용했습니다.
- AJAX 코드를 주석 처리하면 새 위젯에 표준 선택 입력이 필요합니다. 그들은하지 않습니다. 왜 그런지 모르겠다
그렇다면 변경하기 전에 사용자에게 저장을 새로 고치거나 클릭하도록 지시하지 않고 선택 제어 작업을 수행하려면 어떻게해야합니까?
jQuery( document ).ajaxStop( function() {
한 것과 새로로드 된 위젯에서 컨트롤을 초기화 할 수 있도록 파트를 추가 한 이유 입니다. 그러나 해당 줄을 제거하면 새 위젯에 표준 HTML 선택 입력이있을 것으로 예상되지만 = s는 아닙니다.
widget-updated
and widget-added
이벤트 를 사용하여 접근 방식이 가장 깨끗 합니다. 또한 @michaeljames 코드에서 요소 id의 사용을 강조하고 싶습니다 #widgets-right
. JS 코드 내에서 활성 위젯 요소 를 대상으로 지정하려면이를 사용하십시오. 그렇지 않으면 화면 왼쪽에서 숨겨진 비활성 위젯 요소를 선택할 수도 있으므로 위젯이 중복 될 수 있습니다 (위젯이 추가 될 때 복제 됨).
.on()
메소드 를 사용하여 조사해야합니다 . 이벤트를 문서에 바인딩해야합니다. 그러나 어떤 행사가 적절한 지 지금은 확실하지 않습니다. 궁극적으로 원본 바인딩은 페이지가로드 될 때 DOM의 초기 버전을 나타내며 대부분은 아약스를 통해 추가되는 새로운 요소 (위젯 컨텐츠)에 대해 눈에 띄지 않기 때문입니다. 내가 직장에있을 때 더 잘 대답 할 수 있다면 올바른 방향으로 당신을 가리킬 수 있기를 바랍니다.