2016-10-08 4 views
-1

私はウェブサイトを作っていますが、IE8と互換性があります。私は私のページに単純なフォームがあり、ラジオボタンを使用して、フォームのどのフィールドセットが表示されているかを変更しています。基本的に私はユーザーに彼の名前または彼の番号を入力するオプションを与えています。私はF12メニューのIE8互換モードでW10でIE11を使用していますが、切り替えは機能しません。これはIE9 +でもどこでも動作します。何が問題なのか知っていますか?IE8でテストしたところ、私のJavascriptが動作しません

両方のラジオボタンには、display:noneとdisplay:blockのフィールドセットを設定するonclick関数があります。 "header__form__fs_person"はデフォルトでは表示されません。

HTML:

  <form class="header__form" name="form_name"> 
       <fieldset class="header__form__label_choices"> 
        <label class="header__form__label" for="person">Podle jména</label> 
        <input class="header__form__input_radio" type="radio" value="person_on" id="person" name="choice" onclick="hideIc(this)" checked> 

        <span class="header__form__divider">/</span> 

        <label class="header__form__label" for="ic">Podle IČ</label> 
        <input class="header__form__input_radio" type="radio" value="ic_on" id="ic" name="choice" onclick="hidePerson(this)"> 
       </fieldset> 

       <fieldset class="header__form__fs_person"> 
        <input class="header__form__input_text" type="text" id="name" placeholder="Jméno" required> 

        <input class="header__form__input_text" type="text" id="lastname" placeholder="Příjmení" required> 

        <input class="header__form__input_text" type="text" id="bday" placeholder="Narozen" onfocus="(this.type='date')" required> 
       </fieldset> 

       <fieldset class="header__form__fs_ic" disabled> 
        <input class="header__form__input_text" pattern=".{9,}" placeholder="123456789" required> 
       </fieldset> 

       <label class="header__form__terms" for="terms">Souhlasím s <a class="header__form__terms_a" href="">obchodnimi podmínkami</a></label> 
       <input class="header__form__input_checkbox" type="checkbox" id="terms" required> 

       <input class="header__form__input_btn" type="submit" value="Ověřit"> 
      </form> 

JS:

<script> 
      function hideIc(radio_btn) { 
       if (radio_btn.checked) { 
        var ic = document.getElementsByClassName("header__form__fs_ic"); 
        var person = document.getElementsByClassName("header__form__fs_person"); 

        for (var i=0; i < ic.length; i++) { 
         ic[i].style.display = "none"; 
         ic[i].disabled = true; 

         person[i].style.display = "block"; 
         person[i].disabled = false; 

        } 

       } 
      } 

      function hidePerson(radio_btn) { 
       if (radio_btn.checked) { 

        var ic = document.getElementsByClassName("header__form__fs_ic"); 
        var person = document.getElementsByClassName("header__form__fs_person"); 

        for (var i=0; i < ic.length; i++) { 
         ic[i].style.display = "block"; 
         ic[i].disabled = false; 

         person[i].style.display = "none"; 
         person[i].disabled = true; 
        } 
       } 
      } 

     </script> 
+0

何specifally問題となっているエラーは何ですか?パターンとプレースホルダはシムなしではサポートされません。 – charlietfl

+0

エラーはありません。機能しないだけです。何も起こらないラジオボタンをクリックすると何も隠れず、何も表示されません。また、パターンやプレースホルダは私が見ていないものです。どうすればそれらを機能させることができますか? – Arcane

答えて

0

IE8はgetElementsByClassName()をサポートしていません。

はこちらをご覧ください:http://caniuse.com/#feat=getelementsbyclassname

ウォークアラウンドがあります:

if(!document.getElementsByClassName) { 
    document.getElementsByClassName = function(className) { 
     return this.querySelectorAll("." + className); 
    }; 
    Element.prototype.getElementsByClassName = document.getElementsByClassName; 
} 

答えは私のものではありません...私はここでそれを見つけた:ないです
javascript document.getElementsByClassName compatibility with IE

+0

あなたのソリューションを読んで試してみましたが、すべてのブラウザで動作していましたが、IE8互換モードではまだ動作しませんでした。私は関数を試してみましたが、すべての 'getElementsByClassName'を 'querySelectorAll'に置き換えようとしましたが、それでも動作しませんでした。 – Arcane

+0

jQueryを使って(あなたの質問にタグを付けて)、 'var person = $("。header__form__fs_person ");' ...を使うともっと簡単になります。なぜなら、それはあなたのために働いていない理由を説明することはできません。 –

関連する問題