itboxs
홈
태그
방명록
IT박스
jQuery 변경 이벤트
itboxs
2021. 1. 8. 08:02
반응형
jQuery 변경 이벤트
IE에서 실행되지 않음 가변 개수의 <select> 요소가있는 페이지가 있습니다 (여기서 이벤트 위임을 사용하는 이유를 설명합니다).
사용자가 선택한 옵션을 변경할 때 페이지의 다른 콘텐츠 영역을 숨기거나 표시하고 싶습니다.
내가 가진 코드는 다음과 같습니다. $ (document) .ready (function () {$ ( '# container'). change (function (e) {var changed = $ (e.target); if (changed.is ( 'select [name = "mySelectName"] ')) {// 선택한 옵션을 테스트하고 다른 콘텐츠 영역을 숨기거나 표시합니다.}});});
이것은 Firefox 및 Safari에서 작동하지만 IE에서는 변경 이벤트가 발생하지 않습니다.
왜 그럴까요?
감사!
변경 이벤트는 IE에서 버블 링되지 않습니다 (여기 및 여기 참조).
이벤트 위임을 함께 사용할 수 없습니다.
사실로,
이 IE 버그로 인해 jQuery live가 지원되는 이벤트 목록에서 변경 사항을 공식적으로 제외해야했습니다 (DOM 사양 상태 변경 사항이 버블 링되어야 함). [1] 질문과 관련하여 각 선택 항목에 직접 바인딩 할 수 있습니다. $ ( '#container select'). change (/*...*/) 정말로 이벤트 위임을 원한다면이 사람이 한 일을 시도하고 IE에서만 클릭에 바인딩하는 데 성공할 수 있습니다. container '). bind ($. browser.msie?'click ':'change ', function (event) {/ * test event.type and event.target * to capture only select control changes * /})하지만이 브라우저 감지 정말 잘못된 것 같아요.
나는 정말로 이전 예제로 작업을 시도 할 것입니다 (드롭 다운에 직접 바인딩).
수백 개의 <select> 상자가 없으면 이벤트 위임은
어쨌든 여기서 많이 사주지.
[1] 참고 : jQuery> = 1.4는 이제 live () / on ()을 통해 IE에서 버블 링 변경 이벤트를 시뮬레이션합니다.
도움이 될 수있는 아이디어 : $ (document) .ready (function () {$ ( '# container select [name = "mySelectName"]'). change (function (e) {var s = $ (e.target); if (s.val () == '1') // 무언가 숨기기 / 보이기;});});
AJAX를 사용하는 경우 live () function : $ (document) .ready (function () {$ ( '# container select [name = "mySelectName"]'). live ( 'change', function (e) { var s = $ (e.target); if (s.val () == '1') // 무언가 숨기기 / 보이기;});});
올바르게 기억하면 blur ()를 호출하여 jQuery가 IE 시스템에서 change ()를 호출하도록해야합니다.
다음과 같이 시도해보십시오. $ ( "select [name = mySelectName]"). click (function () {$ (this) .blur ();});
jquery 1.4 사용.
4 (그리고 1.4.3)은 이제 모두 괜찮은 것 같습니다 .... 변경 이벤트는 제한된 테스트에서 일관되게 작동합니다.
이 줄을 페이지 머리에 추가하고, 편히 앉아 휴식을 취하세요!
:) $ (document) .ready (function () {$ ( 'select'). bind ( 'onChange', function () {$ (this) .blur ()});});
onchange = doAction은 IE 및 Firefox에서 작동하지만 Chrome에서는 지원되지 않습니다.
이를 처리하려면 jQuery의 .change 이벤트를 사용해야합니다.
이벤트를받은 후 select의 이름을 다시 확인해야하는 이유를 이해하려고합니다.
혹시 동일한 ID를 가진 여러 요소가 있습니까?
실제로 "#container"대신 "#container select"라고 말하려고 하셨나요?
저는 단순히 "Crescent Flesh"가 설정 한 예제를 기반으로하고 있습니다.
AJAX 호출을 통해 #container 내에서이 SELECT를로드하더라도 살아남을 크로스 플랫폼 솔루션을위한 것입니다.
$ ( '# container'). bind ($. browser.msie? 'click': 'change', function (event) {if ((event.type == 'click') || (event.type == ' change ')) {if (event.target.toString (). indexOf ('Select ')! = -1) {var sWhich = $ ('# container SELECT '). val (); handleSelectionChange (sWhich);}} });
이제 간단히 handleSelectionChange () 함수를 빌드하고 원하는 이름을 변경합니다.
IE는 문서 준비 내부에 변경 이벤트를 배치해야합니다.
이것은 변경 이벤트를 관련 요소에 바인딩하는 것 같습니다.
도움이 되었기를 바랍니다.
: D : D와, 해결책을 찾고 있었는데 ... 왜 그렇게 복잡하다고 생각합니까?
간단히 : <select onchange = "doAction"> ReferenceURL : https : // stackoverflow.
반응형
공유하기
게시글 관리
itboxs
'
IT박스
' 카테고리의 다른 글
내 활동 내내 화면을 깨어있게 유지
(0)
2021.01.09
미래가 될 때까지 기다려
(0)
2021.01.08
웹 페이지에서 .svg 파일을 사용하는 방법은 무엇입니까?
(0)
2021.01.08
Subversion : 트렁크에 병합되지 않은 모든 개정을 찾는 방법은 무엇입니까?
(0)
2021.01.08
Ruby / Rails의 루프에서 매직 첫 번째와 마지막 표시기?
(0)
2021.01.08
티스토리툴바