Jquery 选择combobox中的项,该项根据AJAX请求填充

Jquery 选择combobox中的项,该项根据AJAX请求填充,jquery,ajax,Jquery,Ajax,我有以下JavaScript/jQuery问题: Combobox通过调用web服务在客户端填充 填充后在组合框中选择一项 我无法发布全部代码,但尝试剪掉有趣的部分: HTML: <select name="RegionId"> </select> $(function () { $.getJSON('/hotels/GetRegionsByCountry/1', function (data) { var items = [];

我有以下JavaScript/jQuery问题:

  • Combobox通过调用web服务在客户端填充
  • 填充后在组合框中选择一项
  • 我无法发布全部代码,但尝试剪掉有趣的部分:

    HTML:

    <select name="RegionId">
    </select>
    
    $(function () {
         $.getJSON('/hotels/GetRegionsByCountry/1', function (data) {
             var items = [];
             $.each(data, function (index) {
                 items.push('<option value="' + this.Id + '">' + this.Name + '</option>');
             });
             $("[name='RegionId']").html(items.join(''));
         });
         $("[name='RegionId']").val("24");
    });
    
    
    
    JavaScript:

    <select name="RegionId">
    </select>
    
    $(function () {
         $.getJSON('/hotels/GetRegionsByCountry/1', function (data) {
             var items = [];
             $.each(data, function (index) {
                 items.push('<option value="' + this.Id + '">' + this.Name + '</option>');
             });
             $("[name='RegionId']").html(items.join(''));
         });
         $("[name='RegionId']").val("24");
    });
    
    $(函数(){
    $.getJSON('/hotels/GetRegionsByCountry/1',函数(数据){
    var项目=[];
    $。每个(数据、函数(索引){
    items.push(“”+此.Name+“”);
    });
    $(“[name='RegionId']”)html(items.join(“”));
    });
    $(“[name='RegionId']”)val(“24”);
    });
    
    问题:组合框填充后(1)选择失败(2)


    在我看来,jQuery无法访问已填充的项。但是为什么呢?

    为输入字段赋值是在填充字段之前执行的(请求尚未完成)。 试试这个:

    $(function () {
         $.getJSON('/hotels/GetRegionsByCountry/1', function (data) {
             var items = [];
             $.each(data, function (index) {
                 items.push('<option value="' + this.Id + '">' + this.Name + '</option>');
             });
             $("[name='RegionId']").html(items.join(''));
             $("[name='RegionId']").val("24");
         });   
    });
    
    $(函数(){
    $.getJSON('/hotels/GetRegionsByCountry/1',函数(数据){
    var项目=[];
    $。每个(数据、函数(索引){
    items.push(“”+此.Name+“”);
    });
    $(“[name='RegionId']”)html(items.join(“”));
    $(“[name='RegionId']”)val(“24”);
    });   
    });
    
    试着这样做:

    $(function () {
         $.getJSON('/hotels/GetRegionsByCountry/1', function (data) {
             var select = $("[name='RegionId']");
             $.each(data, function (index) {
                 select.append('<option value="' + this.Id + '">' + this.Name + '</option>');
             });
             $("[name='RegionId']").val("24");
         });
    
    });
    
    $(函数(){
    $.getJSON('/hotels/GetRegionsByCountry/1',函数(数据){
    var select=$(“[name='RegionId']”);
    $。每个(数据、函数(索引){
    select.append(“”+this.Name+“”);
    });
    $(“[name='RegionId']”)val(“24”);
    });
    });
    
    您不必使用
    数据[索引]
    而不是
    ?也许我错了,代码的这一部分很好用。最后一行(.val)不起作用。@AdolAurion在
    $的上下文中。each()
    引用迭代中的特定项,它实际上是
    数据[索引]
    ,因此任何一种方法都应该起作用。是的,正如
    $(“[name='RegionId']”)一样。val()
    不会给您选择的选项,我认为您也不能以这种方式强制选择行。您是否尝试过手动设置所选选项,例如
    var selected=//ID为“24”的选项;选定。道具(“选定”)目标是手动将选定特性添加到该行。由于您是从头开始构建组合框,所以这次不必检查其他选定行。哦,我明白了。非常感谢。但所选内容不能在事件处理程序中。这必须在将值加载到组合框后发生。请确保下拉列表中包含值为24的。感谢您发现此问题。我使用同步AJAX请求解决了这个问题,因为我不想重复代码:(使用ajaxSetup查找Jonathan的答案)