2012-03-08 74 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

相关问题