0

我有一个功能,其中有一些下拉菜单。

我有一些值,我必须检查这些值是否存在于下拉列表中。如果它们存在,我必须保留它们并从我的下拉列表中删除其他选项

这就是我一直在尝试做的

function getimage(value, ProdId) {
  $.getJSON("/api/ProductDetails", { option: value, productid: ProdId }, function (data) {
    $.each(data, function (idx, product) {
      $('#defaultimage').empty();
      $('<img id="dfltimage"/>').attr({ src: product.ImageURL }).appendTo('#defaultimage');

      if (product.options.length > 0) {
        $.each(product.options, function (idx, option) {
          /*appending the each option to a label*/
          $("" + "#" + option.OptionName + "").empty();
          if (option.values.length > 0) {
            /*Creating a select tag for the Retrieved options*/
            //$("" + "#" + options.OptionName + "").empty();                  
            $.each(option.values, function (idx, value) {                 
              alert(value.OptionValue);
 //             $("" + "#" + option.OptionName + "").append('<option value="' + value.OptionValue + '">' + value.OptionValue + '</option>');
              $("" + "#" + option.OptionName + "").children('option').hide();
  //            $("" + "#" + option.OptionName + "").children("option[text=" + value.OptionValue + "]").show();
              $("" + "#" + option.OptionName + "option[value='" + value.OptionValue + "']").show();
            });
          }
        })
      }
    });
  });
}    

在这种情况下,下拉列表最后是空的

这就是我根据给出的答案所做的更改

           if (product.options.length > 0) {
                    $.each(product.options, function (idx, option) {
                        /*appending the each option to a label*/

                        $("" + "#" + option.OptionName + " option").attr('not_required', 'true');
                        if (option.values.length > 0) {
                            /*Creating a select tag for the Retrieved options*/                                    
                            $.each(option.values, function (idx, value) {                             
                            alert(value.OptionValue);
                            $("" + "#" + option.OptionName + "option[value='" + this_value + "']").removeAttr('not_required');
                            $("" + "#" + option.OptionName + " option[not_required=true]").remove();

                            });

                        }

                    })
                }

值不会被删除

4

1 回答 1

0

首先在所有选项中设置一个属性,例如“not_required”。

$('#my_select_id option').attr('not_required','true');

然后遍历你的结果,在你找到它时删除每个属性。

for(...) {
  $('option[value=' + this_value + ']').removeAttr('not_required');
}

最后选择所有仍然具有该属性的选项并删除(或隐藏)它们。

$('#my_select_id option[not_required=true]').remove();

[编辑]

您过早地删除了“不需要的”选项。您需要等到循环结束。

这是我上面的编辑版本:

       if (product.options.length > 0) {
                $.each(product.options, function (idx, option) {
                    $("" + "#" + option.OptionName + " option").attr('not_required', 'true');
                    if (option.values.length > 0) {
                        $.each(option.values, function (idx, value) {                             
                            alert(value.OptionValue);
                            $("#" + option.OptionName + " option[value='" + this_value + "']").removeAttr('not_required');
                        });
                    }
                })
                $("#" + option.OptionName + " option[not_required=true]").remove();
            }
于 2012-10-17T12:32:05.910 回答