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 に答える