簡體   English   中英

IE中的jQuery錯誤

[英]Jquery error in IE

在過去的幾個小時里,我一直在努力解決這個問題,希望這里有人可以幫忙。 我正在使用JQuery 1.6.4在單擊按鈕時進行ajax調用,並用結果填充表的內容。 該代碼在除IE之外的所有瀏覽器中均應正常工作。 當我在IE中運行它時,會填充一些值,而其他值則不會,很奇怪!

當我運行腳本並使用IE的調試工具時,出現以下錯誤;

意外調用方法或屬性(第3行)

有人知道我在做什么錯嗎? 這是我運行ajax的代碼;

$(document).ready(function(){

$("#find").click(function ()    {

    //Set kinase
    var kinaseEntry = $("#kinaseEntry").val();
    var dataString = "kinaseEntry=" + kinaseEntry;

    //Fetch list from database
    $.ajax({
        type : "GET",
        url : "http://www.webaddress/php/post.php",
        datatype: "json",
        data:   dataString,
        success : function(datas)   {

            //SET VARIABLES TO BE USED THROUGHOUT PAGE
            var kinaseName = (datas.skuName);
            var molecularWeight = (datas.molecularWeight);
            var kinaseConc = (datas.kinaseConc);
            var anti1Name = (datas.antiName);
            var anti2Name = (datas.antiName2);
            var antiConc = (datas.antiConc);
            var antiConc2 = (datas.antiConc2);
            var tracerName = (datas.tracerName);
            var tracerConc = (datas.tracerConc);
            var tracerStockConc = (datas.tracerStockConc);
            var tracerSku = (datas.tracerSku);
            var kinaseSku = (datas.kinaseSku);
            var antiSku = (datas.antiSku);
            var antiSku2 = (datas.antiSku2);
            var bufferName = (datas.bufferName);
            var bufferSku = (datas.bufferSku);

            //REAGENT NAMES
            $(".kinaseName").html(kinaseName + " (" + molecularWeight + " kDa)");
            $(".anti1Name").html(anti1Name);
            $(".anti2Name").html(anti2Name);
            $(".tracerName").html(tracerName);
            $(".bufferName").html(bufferName);

            //DEFAULT VALUES
            $(".defaultKinaseConc").html(kinaseConc);
            $(".defaultAntiConc").html(antiConc);
            $(".defaultAnti2Conc").html(antiConc2);
            $(".defaultTracerConc").html(tracerConc);
            $("#molecularWeight").val(molecularWeight);
            $("#tracerStockConc").val(tracerStockConc);

            //INSERT DEFAULTS INTO INPUT
            $("#userKinaseConc").val(kinaseConc);
            $("#userAntibodyConc1").val(antiConc);
            $("#userAntibodyConc2").val(antiConc2);
            $("#userTracerConc").val(tracerConc);
        },
        error : function (XMLHttpRequest, textStatus, errorThrown) {
            console.log("error :"+XMLHttpRequest.responseText);
        }
    });
    return false;
}); });

名稱填充良好,第一個默認值填充,但其余部分中斷。 任何幫助將不勝感激。

這是我的console.log()的結果;

antiConc
    "2"

antiConc2
    "2"

antiName
    "Biotin-anti-His"

antiName2
    "Eu-Streptavidin"

antiSku
    "PV6089"

antiSku2
    "PV5899"

bufferName
    "Kinase Buffer A"

bufferSku
    "PV3189"

cleanSKU
    null

kinaseConc
    "5"

kinaseSku
    "P3049"

molecularWeight
    "125.4"

skuName
    "ABL1"

tracerConc
    "100"

tracerName
    "Kinase Tracer 1710"

tracerSku
    "PV6088"

tracerStockConc
    "25"

您確定它在其他瀏覽器中可以正常工作,還是只是沒有那么嚴重地損壞。

我猜您在這里發生的混合更新(根據val()和html()的使用推斷出一個區別)。 我注意到一種模式,其中通過id檢索的元素(例如#userKinaseConc)和通過類檢索的元素(例如.kinaseName)分別使用val()和html()。 但是,#defAntiCon破壞了該模式。 您正在為此元素使用html()。 該元素是輸入字段還是其他表單字段? 應該是val()嗎?

您可以通過嘗試通過html()setter而不是val()將值應用於輸入字段來重新創建您描述的體驗,但是它不適用於所有特定值的特定字段...除IE之外的其他瀏覽器僅會以不同的方式失敗,並且錯誤不會中斷。 在IE中,它將中斷執行。 #defAntiCon實際上是根據其他瀏覽器返回的數據填充的嗎?

IE8嚴格要求HTML插入。 如果您的標記無效,或者具有HTML5專用標記,則會引發錯誤。

我沒有真正的解決方案,但是我將按照以下步驟進行操作。

  1. 確保datas包含有效的HTML,確保沒有多余的結束標記或語法錯誤(如果需要,可以使用驗證器
  2. 如果您使用的是HTML5標簽,則可以嘗試使用html5shiv來確保瀏覽器能夠理解所有標簽
  3. 在某些情況下,請不要使用.val()而不是.html()
  4. 由於.text(datas.foo)字符串傳遞給方法,因此應將.html(datas.foo)替換為.text(datas.foo)
  5. 如果找不到任何解決方案,則可以通過執行以下更改在jQuery resolveWith方法中添加catch塊(請resolveWith您的注釋):

替換為:

resolveWith: function ( context, args ) { 
    if ( !cancelled && !fired && !firing ) { 
        // make sure args are available (#8421) 
        args = args || []; firing = 1;
        try {
            while ( callbacks[ 0 ] ) { callbacks.shift().apply( context, args ); } 
        } finally { 
            fired = [ context, args ]; 
            firing = 0; 
        }
    }
    return this ;
},

有了這個 :

resolveWith: function ( context, args ) { 
    if ( !cancelled && !fired && !firing ) { 
        // make sure args are available (#8421) 
        args = args || []; firing = 1;
        try {
            while ( callbacks[ 0 ] ) { callbacks.shift().apply( context, args ); } 
        } catch (err) {

        } finally { 
            fired = [ context, args ]; 
            firing = 0; 
        }
    }
    return this ;
},

IE中的try-finally final上的錯誤報告在這里

希望這可以幫助。

編輯:正如@Josh在評論中提到的,該錯誤已報告並在jQuery 1.7.x的 此提交中解決。 一個簡單的jQuery更新就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM