2012-02-13 2 views
0

일부 라디오 버튼을 사용자 정의하기 위해 jQuery를 사용하고 있습니다. 두 개의 서로 다른 클래스를 찾는 두 개의 if 문을 볼 수 있도록 두 개의 다른 라디오 버튼 스타일이 있습니다.사용자 정의 라디오 버튼 - IE가 나를 죽일 것입니다

내가 계속 실행하는 문제는 스크립트가 Internet Explorer 이외에도 완벽하게 작동한다는 것입니다. 슬프게도 내가 일하는 회사는 IE8을 모든 웹 사이트의 산업 표준으로 지정 했으므로 IE8과 함께 작동해야하는 모든 것이 있습니다. 2

<label class="label_radio" for="radio0">0<input id="radio0" name="q5" type="radio" value="0"/></label> 
<label class="label_radio" for="radio1">1<input id="radio1" name="q5" type="radio" value="1"/></label> 
><label class="label_radio" for="radio2">2<input id="radio2" name="q5" type="radio" value="2"/></label> 

JQuery와 전체 섀즈 - 봇을 실행 한

<label class="label_radio-STD happy" for="happy3"><input id="happy3" name="q3" type="radio" value="YES"/></label> 
<label class="label_radio-STD meh" for="meh3"><input id="meh3" name="q3" type="radio" value="INDIFFERENT"/></label> 
<label class="label_radio-STD sad" for="sad3"><input id="sad3" name="q3" type="radio" value="NO"/></label> 

HTML 라디오 버튼 라디오 버튼에 내가 너희에게 보내

, 내 코드

HTML

<script> 
    function setupLabel() { 
     if ($('.label_check input').length) { 

      $('.label_check').each(function(){ 
       $(this).removeClass('c_on'); 
      }); 

      $('.label_check input:checked').each(function(){ 
       $(this).parent('label').addClass('c_on'); 
      });     
     }; 

     if ($('.label_radio input').length) { 

      $('.label_radio').each(function(){ 
       $(this).removeClass('r_on'); 
      }); 

      $('.label_radio input:checked').each(function(){ 
       $(this).parent('label').addClass('r_on'); 
      }); 
     }; 

     if ($('.label_radio-STD input').length) { 

      $('.label_radio-STD').each(function(){ 
       $(this).removeClass('s_on'); 
      }); 

      $('.label_radio-STD input:checked').each(function(){ 
       $(this).parent('label').addClass('s_on'); 
      }); 
     }; 

    }; 
    $(document).ready(function(){ 
     $('label').click(function(){ 
      setupLabel(); 
     }); 
     setupLabel(); 
    }); 
</script> 

각 IF 문에 ALERTS를 사용하면 좋은 결과를 얻었고 각 루프에 경고를 던졌고 좋은 결과를 얻었습니다. 이전에 document.ready 함수의 첫 번째 행으로 jQuery "$ ('body'). addClass ("has-js ") 행을 사용 했었지만 html 본문에는 has-js 클래스가 없었습니다. 코드를 자세히 살펴보면 내가 실행중인 코드에 대해 코드가 필요 없다는 것을 알게되었습니다. 하지만 여전히 $ ('body'). addClass ("has-js")는 절대로 작동하지 않습니다.

IE8 용 자바 스크립트가 꺼져있는 것처럼 간단 할 수 있습니까? 만약 그렇다면, 전원을 껐을 수있는 사람들을 위해 강제로 켤 수 있습니까?

+1

당신은 자바 스크립트를 사용하지 않도록 설정을 사용자에게 메시지를 표시 할 HTML에'

+0

javscript 인코딩 사용 (모든 자바 스크립트 식별자/구문 앞에 접두사 '\'가 표시됨) – MozenRath

+1

IE에서 시도했습니다. 당신에게 효과가없는 것은 무엇입니까? http : // jsfiddle.net/GRstu/ –

답변

3

다음은 Murphy의 코드입니다. http://jsfiddle.net/GRstu/10/

바이올린 input[type=radio]{display:none;}의 CSS 줄에주의하십시오. 이 줄은 레이블을 클릭 할 때 라디오 단추가 선택/선택 해제되지 않게합니다. 이것은 IE가 작동하는 방식입니다. 해당 레이블을 클릭 할 때 숨겨진 라디오를 확인하려면 문제 해결 방법을 수행해야합니다. 이 그 앞으로 가져 유사한 솔루션과 문제가 있음을 http://jsfiddle.net/GRstu/11/

참고 : 여기에

$('label').click(function() { 
    $(this).children("input").prop("checked", true); //This is the key 
    setupLabel(); 
}); 

솔루션의 jsfiddle은 다음과 같습니다

당신은 클릭 이벤트에 줄을 추가하여 그렇게 할 수 있습니다 이 질문에 : Labels and hidden fields in Internet Explorer (and jquery)

+0

SWEET MAMA JAMMA. 선생님, 선생님, 부인, 아시겠지만, 아바타에 대한 Identicon을 가지고 계신 것 같습니다. – Murphy1976

+1

OK ... 너무 빨리 ... 나는 모든 레이블에 대해 .click 함수에'$ (this) .children ("input"). prop ("checked", true);를 추가했지만 이유는 label_radio-STD가 아니라 label_radio에서만 작동하는 이유입니다. 생각? – Murphy1976

+0

jsfiddle에서 문제를 재현 할 수 있습니까? 거기에서 디버그하는 것이 훨씬 쉽습니다. –

1

HTML에 <noscript> 태그를 던져 자바 스크립트가 해제 된 사용자에게 메시지를 표시 할 수 있지만 웹 페이지에서 태그를 사용하도록 설정할 수는 없습니다.

예. 당신이 기업 환경에있어 이후

<noscript> Enable javascript! </noscript> 

그러나, 시스템 관리자는 Group Policy 모든 사용자의 Internet Explorer 설정에서 자바 스크립트를 사용하도록 만들 수 있습니다.

+0

OK ...

관련 문제