5

重複の可能性:
Javascript IE イベント

スクリプトを実行する IE8 に問題があります。他のすべてのブラウザは問題ありません。実際のエラーは、「tagName が null であるか、オブジェクトではありません」です。私のスクリプトはおそらく最高のものではなく、動作する可能性があることを認識していますが、IE8 で動作するためには本当に必要です。スクリプトは document.ready jQuery 関数にラップされており、jquery のバージョンは 1.5.2 です。主な問題が関係しているような気がしますがvar target = ev.target;、よくわかりません。

問題のスクリプトの部分は次のとおりです。

var hrNav = document.getElementById('hrNavListen');
    var hrNav2 = document.getElementById('hrNavListenTwo');
    var startButton = document.getElementById('startButton');

    //Check to see if the user is on an iPad or iPhone
    var isiPad = (navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPhone/i)) != null;

    //If the user is on an iphone or ipad, use the touchstart event listener rather than click. Use click otherwise, or use onclick for IE users.
    if (isiPad == true) {
        hrNav.addEventListener('touchstart', highlight);
    } else {
        if(hrNav.addEventListener){  
            hrNav.addEventListener('click', highlight); 
            } else {  
                hrNav.attachEvent('on'+'click', highlight);
        }
    }
/* MAIN FUNCTION TO HIGHLIGHT THE CORRECT ITEM, AS WELL AS FILL IN CORRECT DATA */
    function highlight(ev) {

        var target = ev.target;

        //Function to set the dataSection variable to the appropriate string so that the correct section is loaded
        function switchContent(var1,var2,var3,var4,var5,var6,var7,var8,var9,var10,var11,var12,var13,var14,var15,var16,var17,var18) {
            switch (target.getAttribute('data-section')) {
                case var1:
                    var dataSection = 'hrPortalMain';
                    var btn = false;
                    break;
                case var2:
                    var dataSection = 'handbookMain';
                    var btn = true;
                    break;
                case var3:
                    var dataSection = 'handbookSection1';
                    var btn = true;
                    break;
                case var4:
                    var dataSection = 'handbookSection2';
                    var btn = true;
                    break;
                case var5:
                    var dataSection = 'handbookSection3';
                    var btn = true;
                    break;
                case var6:
                    var dataSection = 'handbookSection4';
                    var btn = true;
                    break;
                case var7:
                    var dataSection = 'handbookSection5';
                    var btn = true;
                    break;
                case var8:
                    var dataSection = 'handbookSection6';
                    var btn = true;
                    break;
                case var9:
                    var dataSection = 'handbookSection7';
                    var btn = true;
                    break;
                case var10:
                    var dataSection = 'handbookSection8';
                    var btn = true;
                    break;
                case var11:
                    var dataSection = 'handbookSection9';
                    var btn = true;
                    break;
                case var12:
                    var dataSection = 'handbookSection10';
                    var btn = true;
                    break;
                case var13:
                    var dataSection = 'handbookSection11';
                    var btn = true;
                    break;
                case var14:
                    var dataSection = 'antiDiscrimination';
                    var btn = true;
                    break;
                case var15:
                    var dataSection = 'substanceAbuse';
                    var btn = true;
                    break;
                case var16:
                    var dataSection = 'disclosureRelease';
                    var btn = true;
                    break;
                case var17:
                    var dataSection = 'emergencyContact';
                    var btn = true;
                    break;
                case var18:
                    var dataSection = 'submitForms';
                    var btn = true;
                    break;
            }/* /end switch */

            //Use jQuery AJAX to load the appropriate html
            $.ajax({
                url: "views/"+dataSection+".php",
                cache: false,
                dataType: "html"
            }).done(function( html ) { 
                $("#hrContent").html(html);
            });

            return dataSection;
        }

        if (target.nodeName === 'LI') {

            $("li").removeClass("navActive");
            $("span").removeClass("navActiveText");
            $("#hrarrow").remove();
            $(".navBodyText").css('margin-left','30px');
            $("#navMain,#navMOCForms,#navHandbookMain,#navGeneralPolicyMain,#navBenefitsMain,#navTaxMain").css('margin-left','0px');

            target.innerHTML += '<img src="img/hrarrow.png" id="hrarrow"/>';
            target.className += ' navActive';
            childSpan = target.firstChild;
            childSpan.style.marginLeft = '0';
            childSpan.className += ' navActiveText';
            childSpan.firstChild.className += ' navActiveText';

            switch (target.firstChild.id) {
                case 'navMain':
                    $("#navMain").css('margin-left','-30px');
                    break;
                case 'navMOCForms':
                    $("#navMOCForms").css('margin-left','-30px');
                    break;
                case 'navHandbookMain':
                    $("#navHandbookMain").css('margin-left','-30px');
                    break;
                case 'navGeneralPolicyMain':
                    $("#navGeneralPolicyMain").css('margin-left','-30px');
                    break;
                case 'navBenefitsMain':
                    $("#navBenefitsMain").css('margin-left','-30px');
                    break;
                case 'navTaxMain':
                    $("#navTaxMain").css('margin-left','-30px');
                    break;
            }/* /end switch */


            //Determine which content to load depending on the data-* HTML attribute of each LI elements
switchContent('hrPortalMain','handbookMain','handbookSection1','handbookSection2','handbookSection3','handbookSection4','handbookSection5','handbookSection6','handbookSection7','handbookSection8','handbookSection9','handbookSection10','handbookSection11','antiDiscrimination','substanceAbuse','disclosureRelease','emergencyContact','submitForms');

        }/* /endif */

        if (target.nodeName === 'SPAN') {

            $("li").removeClass("navActive");
            $("span").removeClass("navActiveText");
            $("#hrarrow").remove();
            $(".navBodyText").css('margin-left','30px');
            $("#navMain,#navMOCForms,#navHandbookMain,#navGeneralPolicyMain,#navBenefitsMain,#navTaxMain").css('margin-left','0px');

            target.className += ' navActiveText';
            parent = target.parentNode;

            if (parent.tagName === 'SPAN') {
                parent.parentNode.className += ' navActive';
                parent.className += ' navActiveText';
                parent.parentNode.innerHTML += '<img src="img/hrarrow.png" id="hrarrow"/>';
                $(".navActiveText").css('margin-left','0px');
            } else if(parent.tagName === 'LI') {
                parent.className += ' navActive';
                target.firstChild.className += ' navActiveText';
                parent.innerHTML += '<img src="img/hrarrow.png" id="hrarrow"/>';
                $(".navActiveText").css('margin-left','0px');
            }/* /endif */

            switch (target.id) {
                case 'navMain':
                    $("#navMain").css('margin-left','-30px');
                    break;
                case 'navMOCForms':
                    $("#navMOCForms").css('margin-left','-30px');
                    break;
                case 'navHandbookMain':
                    $("#navHandbookMain").css('margin-left','-30px');
                    break;
                case 'navGeneralPolicyMain':
                    $("#navGeneralPolicyMain").css('margin-left','-30px');
                    break;
                case 'navBenefitsMain':
                    $("#navBenefitsMain").css('margin-left','-30px');
                    break;
                case 'navTaxMain':
                    $("#navTaxMain").css('margin-left','-30px');
                    break;
            }/* /end switch */

            //Determine which content to load depending on the data-* HTML attribute of each LI elements
switchContent('hrPortalMain','handbookMain','handbookSection1','handbookSection2','handbookSection3','handbookSection4','handbookSection5','handbookSection6','handbookSection7','handbookSection8','handbookSection9','handbookSection10','handbookSection11','antiDiscrimination','substanceAbuse','disclosureRelease','emergencyContact','submitForms','employeeBenefitsPackage','flexSpending','dentalEnrollment','groupEnrollment','w4','i9','directDeposit','holidayPayroll','medOneForms','generalPolicy','benefitsMain','compensationMain');

        }/* /endif */

    }/* /end highlight function */
4

1 に答える 1

30

IE8は、イベントオブジェクトのインスタンスをハンドラーに渡しません。グローバルオブジェクトから取得する必要があります。

ev = ev || window.event;

以下を含む、すべてのプロパティとメソッドを共有するわけではありませんtarget

var target = ev.target || ev.srcElement;

これは、MSのイベントへの取り組みとW3Cアプローチの違い、およびこれがもたらすすべての頭痛の種を説明する優れたサイト
です...いいえev.preventDefault()ev.returnValue = false;またはev.cancelBubble = true;その代わりにev.stopPropagation();...

于 2012-11-06T18:56:24.177 に答える