2012-06-30 3 views
2

Can't select or deselect checkboxes inside jQuery UI Modal Dialog과 비슷한 j- 인덱스 UI 대화 상자에서 Z- 색인 문제를 해결하려고 시도하고 있습니다. bug report이 있다는 것을 알고 있습니다.대화 상자에서 체크 박스를 확인할 수 없음

그래서 권장하는 Z- 인덱스 위로하려고, 나는 다음과 같은 코드를 추가 :

$('#interface').click(function(evform){ 
    $('#interface').prop('z-index')=99999; 
}); 

를 어디에 크롬 및 파이어 폭스 CONSOLE.LOG 상태 그러나

Uncaught ReferenceError: Invalid left-hand side in assignment

의에도 불구하고 오류가 발생하면 확인란이 이제 작동합니다 (매번 콘솔 오류가 발생 함). 문제의 라인을 제거하면, 체크 박스는 "unclickable"이됩니다. 이 코드를 올바르게 코딩하려면 어떻게해야합니까?

내 HTML :

<div id="dialog" title="Loading..."> 
    <p id="interface">Loading...</p> 
</div> 

가 (그런데, 나는 <p>에 인라인 스타일을 추가하는 시도, 그것은 작동하지 않았다 :

<p id="interface" style="z-index:99999">Loading...</p> 

을 그리고 AJAX와 함께, 내가 내용을 교체 유효한 체크 박스 html로 '#interface'를 입력하십시오 :

<label for="right"> 
    <input name="right" type="checkbox"> 
</label> 

그리고 저는 일반 jQuery/Dialog UI 파일 포함.

if ($(evform.target).prop('type')=="checkbox"){ 
     $(evform.target).checked; 
} 

* 편집 UPDATE * 2013 년 12 월 (22)로

:이 작업을 수동으로 체크 박스를 전환하지 이후

마지막으로 참고, 나는, 창조적 시도 (EDGE pre release) jQuery core의 버그가 수정되었습니다. 나는 그들이 안정 버전을 곧 풀어주기를 바란다 (나는 그것이 v1.10이 될 것이라고 믿는다)! http://jsfiddle.net/tj_vantoll/XXGQA/

http://bugs.jqueryui.com/ticket/6267

+0

이 질문은 아무 관계가 없으므로 php 태그가 제거되었습니다 – Kris

+0

이것은 말 그대로 옳지 않습니다 :'$ ('# interface'). prop ('z-index') = 99999; '. '99999'는'$ .prop()'호출에 당신이 보낸 두 번째 인자로 있어야합니다. –

+0

jsfiddle을 제공해 주시겠습니까? 그럼 여기서 무슨 일이 일어나는지 훨씬 더 잘 볼 수 있을까요? http://jsfiddle.net/ –

답변

5

z-index#dialog (#interface이 아니라)으로 설정해야합니다.

함수 호출에 값을 지정하려고하므로 코드에서 오류가 발생합니다. 그래서 코드가 있어야한다 : 단지

$('#interface').click(function(evform){ 
  $('#dialog').css('z-index', 99999); 
}); 

또는이 당신의 CSS에 :

#dialog { z-index: 99999; } 

UPDATE

이 솔루션하지 방탄. jQueryUI에 제출 된 버그 보고서에 따르면 확인란 아래에 대화 상자 아래의 오버레이보다 낮은 z-index가 있으면 문제가 발생한다고합니다.jQueryUI는 z- 인덱스를 절대적인 방식으로 비교하는 것으로 보이는데 이는 CSS 표준에 위배됩니다 (하지만 적절한 비교는 리소스 집약적 인 것으로 생각하면 이해할 만합니다).

그래서 실제 해결책은 대화 상자 내에 z-index (및 position)을 설정하는 요소에 따라 달라질 수 있습니다. 이 버그를 피하려면 대화 상자에 z-index을 사용하거나 오버레이에 할당되는 것보다 더 높은 값 (즉, 99999 제안)보다 높은 값을 설정하지 마십시오.

+0

감사합니다, @bfavaretto. 그러나이 작업을 수행 할 때 확인란은 계속 적용될 수 없습니다. 그것은 콘솔 오류가 작동하게 뭔가를 한 것 같습니다. 디버거를 통해 위의 CSS 방법으로 z- 인덱스가 설정되었는지 확인했습니다. – Sablefoste

+1

@SableFoste 그 경우에 bfaveretto가 질문에 대한 코멘트에서 말한 것은 이제 많은 의미가 있습니다 ... 오류를 수정 한 것이 아니라 오류로 인해 발생하는 부분과 그로 인해 결코 실행되지 않는 부분입니다. –

+0

아!, 감사합니다 @ d_inevitable, 나는 당신이 옳다고 생각합니다. 문제는 jQuery API에 묻혀 있기 때문에 무엇이 중지되는지 알 수 없다는 것입니다. 나는 그저 다른 방법을 찾아야 할 수도 있습니다. – Sablefoste

1
$('#interface').click(function(evform){ 
    $('#interface').prop('z-index')=99999; 
}); 

$('#interface').click(function(evform){ 
    $('#interface').prop('z-index', 99999); 
}); 

(있는 경우) 제 2 인수되어야 값의 속성을 설정하면에 jfiddle에서 테스트 할 수있다.

+0

빠른 피드백, @d_inevitable을 가져 주셔서 감사합니다. 나는 이것을 이미 시도했지만 코드는 콘솔 오류를 발생시키지 않기 때문에 "작동"하지만 체크 박스는 더 이상 작동하지 않습니다. 게시 된 원래 코드로 작동합니다 (콘솔 오류가 발생합니다.) – Sablefoste

1

문제는 내가 내 클릭 코딩에 있던 return false;로 밝혀 : 진단

$('#interface').click(function(evform){ 
    *** did stuff here *** 

    evform.preventDefault; 
    return false; //This is the offending line of code 
}); 

, 나는 페이지에 높은 Z- 인덱스를 가지고 무엇을보고 싶어, 그래서 추가 :

$('*').each(function(){ 
    if ($(this).css('z-index')>99) { 
     console.log ($(this).css('z-index')+", " + $(this).prop('class')); 
    } 
}); 

z 지수가 99보다 높은 모든 요소를 ​​제공합니다. ui 대화 상자는 일반적으로 1001 또는 1002로 설정되었으므로 @bfavaretto에 나열된 '99999'는 충분히 높았습니다.

아직도 return false;에서 오류가 생성 된 이유를 아직 알지 못하지만 다음 업데이트로 문제가 해결되기를 바랍니다.

+1

당신이 알아 낸 것을 기쁘게 생각합니다! 당신은 실제로 그 함수로부터'false를 반환 할 수 없습니다 (jQueryUI 버그가 아닙니다). 그러면 클릭되는 요소의 "기본 이벤트"가 방지됩니다 (이전에 'evform'을 사용하는 것처럼 -이 경우 양식이 제출되지 않을 수 있습니다.).체크 박스의 기본 이벤트는'checked'와'checked' 사이의 상태를 토글하는 것입니다. 이를 방지하면 필드가 변경되지 않습니다. 당신이 클릭 핸들러를'# interface'에 설정 했더라도, 이벤트를 클릭하면 핸들러가 체크 박스를 클릭하는 것을 알아챌 수 있습니다. – bfavaretto

+0

그건 의미가 있습니다. 이해를 도와 주셔서 감사합니다 ... 때로는 기계로 프로그램하는 경우가 있는데, 이는 기본 원리를 실제로 이해하는 데 필요한 좋은 예입니다. – Sablefoste

관련 문제