2012-03-08 51 views
3

我有一個頁面使用jQuery加載頁面加載時的選項下拉菜單。這部分工作正常。然後,我想要在查詢字符串中包含的下拉菜單中設置選定的選項(如果有的話) - 如果沒有,則默認它。查詢字符串恢復正常,但我無法使所選選項的設置正常工作。在下面的代碼中,當我停在「調試器」行並檢查Select0時,它是未定義的(在成功加載之後),但是如果我允許代碼繼續運行,則下拉列表將填充來自ajax調用的數據。我猜測這就是爲什麼選擇的項目沒有被設置 - 只是無法弄清楚如何解決它。jQuery從頁面加載數據中設置選定的選項

$(document).ready(function() { 
    $.ajax({ 
      type: "POST", 
      url: "myPage.aspx/MyWebMethod", 
      contentType: "application/json; charset=utf-8", 
      data: "{}", 
      dataType: "json", 
      success: function (states) { 
       var jsonCodes = JSON.parse(states.d); 
       for (var i in jsonCodes) { 
        $("#Select0").append(new Option(jsonCodes[i].regionname, jsonCodes[i].region_id)); 
       } 
       var first = getUrlVars()["region"]; 
       if (first) { 
        $.fn.GetInventory(1, 10, reg, 'rank', 'asc'); // If there is a querystring use it 
        $("#Select0 option[text='" + reg + "']").get(0).selected = true; 
       } 
       else { 
        debugger; 
        var myText = 'United States'; 
        $("#Select0 option[text='" + myText + "']").get(0).selected = true; 
        $.fn.GetInventory(1, 10, 'United States', 'rank', 'asc'); // If no query string default to USA   
       } 
      } 
     }); 
+0

之前'你錯過井號'#'在所有調用中選擇'0'到'$()',但第一個。這是一個錯字還是你的問題的原因? – 2012-03-08 20:15:47

+0

你需要糾正你的jquery選擇器'$(「#Select0」)'。你錯過了#在幾個地方 – dhaval 2012-03-08 20:18:13

+0

錯字 - 這個錯誤停止執行(使用散列標籤#Select0)。 Microsoft JScript運行時錯誤:無法設置屬性「selected」的值:對象爲空或未定義 – 2012-03-08 20:21:57

回答

4

您正試圖匹配不存在的text屬性。你不能寫:

$("#Select0 option[text='" + myText + "']").get(0).selected = true; 

您可以使用filter()代替:

$("#Select0 option").filter(function() { 
    return $(this).text() == myText; 
}).get(0).selected = true; 

或者,將帶庫的更多優勢:

$("#Select0 option").filter(function() { 
    return $(this).text() == myText; 
}).first().prop("selected", true); 
+0

這就像一個冠軍,非常感謝你 - 一直試圖弄清楚這一點。 – 2012-03-08 20:32:28

0

在代碼中有兩個錯誤。

$("Select0 option[text='" + reg + "']").get(0).selected = true; 

這是不正確的。切換到 - >

$("#Select0 option[text='" + reg + "']").get(0).selected = true; 

另外:

$("Select0 option[text='" + myText + "']").get(0).selected = true; 

這是不正確也是如此。更改爲:

$("#Select0 option[text='" + myText + "']").get(0).selected = true; 

應該工作。

+0

忽略主題標籤是一個錯字把代碼放在這裏 - 在它的實際代碼中。我得到的錯誤是:Microsoft JScript運行時錯誤:無法設置'selected'屬性的值:object is null or undefined – 2012-03-08 20:24:59

+0

您是否嘗試將.selected參數更改爲.attr(「selected」,「selected」); ? – Ohgodwhy 2012-03-08 20:29:20

+0

我沒有,但@FrédéricHamidi的建議工作得很好。謝謝你的意見。 – 2012-03-08 20:35:13

相關問題