Отключить или включить опции выбора на основе значения, выбранного в другой выбор

Довольно часто, когда я создаю файл XML из данных, хранящихся в классе, я часто получал ошибки, если атрибут не существовал или имел тип None. В этом случае моя проблема не зная, что такое имя атрибута, как указано в вашем вопросе, а скорее данные, хранящиеся в этом атрибуте.

class Pet:
    def __init__(self):
        self.hair = None
        self.color = None

Если я использовал hasattr для сделайте это, он вернет True, даже если значение атрибута имеет тип None, и это приведет к ошибке моей команды ElementTree set.

hasattr(temp, 'hair')
>>True

Если значение атрибута имело тип None, getattr также вернет его, что приведет к сбою моей команды ElementTree set.

c = getattr(temp, 'hair')
type(c)
>> NoneType

Теперь я использую следующий метод, чтобы позаботиться об этих случаях:

def getRealAttr(class_obj, class_attr, default = ''):
    temp = getattr(class_obj, class_attr, default)
    if temp is None:
        temp = default
    elif type(temp) != str:
        temp = str(temp)
    return temp

Это когда и как я использую getattr.

1
задан mplungjan 2 March 2019 в 08:25
поделиться

2 ответа

СУХОЙ (не повторяйся)

Я не на 100% уверен, что правильно выполнил комбо, но я бы использовал этот метод

Не нужно устанавливать отключенное, Я просто запускаю изменение нагрузки

$('#ordersdetailID_portion').on('change', function() {
  var pl1 = +this.value, // partyloafportionID
     $weight = $('#ordersdetailpartyloafweightID');
  $('option[value="1"]',$weight).prop('disabled', pl1 != 1);
  $('option[value="2"]',$weight).prop('disabled', pl1 != 2);
  $('option[value="3"]',$weight).prop('disabled', pl1 != 3);
  $('option[value="4"]',$weight).prop('disabled', pl1 != 4 && pl1 != 5);
  $('option[value="5"]',$weight).prop('disabled', pl1 != 4 && pl1 != 5);
}).change();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="ordersdetailID_portion" name="child-ID_portion" class="form-control select2  select2-hidden-accessible" tabindex="-1" aria-hidden="true" required="">
  <option value="">** Veuillez saisir une option Nombre de sandwiches</option>
  <option value="4">100</option>
  <option value="1">30</option>
  <option value="2">60</option>
  <option value="3">80</option>
</select>

<select id="ordersdetailpartyloafweightID" name="child-partyloafweightID" class="form-control select2  select2-hidden-accessible" tabindex="-1" aria-hidden="true" required="">
  <option value="">** Please choose the appropriate weight</option>
  <option value="2">1 Kg</option>
  <option value="3">1.5 Kg</option>
  <option value="4">2 Kg</option>
  <option value="5">2.5 Kg</option>
  <option value="1">600 g</option>
</select>

0
ответ дан mplungjan 2 March 2019 в 08:25
поделиться

Ваш код document.getElementById('ordersdetailID_portion').value; возвращает string, но вы проверяете номер.

Кроме того, при каждом изменении необходимо сначала сбросить все опции disabled до false. Проверьте код ниже:

$('form').on('change', function() {
  $('#ordersdetailpartyloafweightID option').prop('disabled', false);
  var pl1 = document.getElementById('ordersdetailID_portion').value; // partyloafportionID

  if (pl1 == "1") {

    console.log('ID_portion:', pl1);
    $('#ordersdetailpartyloafweightID option[value="1"]').prop('disabled', false);
    $('#ordersdetailpartyloafweightID option[value="2"]').prop('disabled', true);
    $('#ordersdetailpartyloafweightID option[value="3"]').prop('disabled', true);
    $('#ordersdetailpartyloafweightID option[value="4"]').prop('disabled', true);
    $('#ordersdetailpartyloafweightID option[value="5"]').prop('disabled', true);

  } else if (pl1 == "2") {

    console.log('ID_portion:', pl1);
    $('#ordersdetailpartyloafweightID option[value="1"]').prop('disabled', true);
    $('#ordersdetailpartyloafweightID option[value="2"]').prop('disabled', false);
    $('#ordersdetailpartyloafweightID option[value="3"]').prop('disabled', true);
    $('#ordersdetailpartyloafweightID option[value="4"]').prop('disabled', true);
    $('#ordersdetailpartyloafweightID option[value="5"]').prop('disabled', true);

  } else if (pl1 == "3") {

    console.log('ID_portion:', pl1);
    $('#ordersdetailpartyloafweightID option[value="1"]').prop('disabled', true);
    $('#ordersdetailpartyloafweightID option[value="2"]').prop('disabled', true);
    $('#ordersdetailpartyloafweightID option[value="3"]').prop('disabled', false);
    $('#ordersdetailpartyloafweightID option[value="4"]').prop('disabled', true);
    $('#ordersdetailpartyloafweightID option[value="5"]').prop('disabled', true);

  } else if (pl1 == "4") {

    console.log('ID_portion:', pl1);
    $('#ordersdetailpartyloafweightID option[value="1"]').prop('disabled', true);
    $('#ordersdetailpartyloafweightID option[value="2"]').prop('disabled', true);
    $('#ordersdetailpartyloafweightID option[value="3"]').prop('disabled', true);
    $('#ordersdetailpartyloafweightID option[value="4"]').prop('disabled', false);
    $('#ordersdetailpartyloafweightID option[value="5"]').prop('disabled', false);

  }

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
  <select id="ordersdetailID_portion" name="child-ID_portion" class="form-control select2  select2-hidden-accessible" tabindex="-1" aria-hidden="true" required="">
    <option value="">** Veuillez saisir une option Nombre de sandwiches</option>
    <option value="4">100</option>
    <option value="1">30</option>
    <option value="2">60</option>
    <option value="3">80</option>
  </select>

  <select id="ordersdetailpartyloafweightID" name="child-partyloafweightID" class="form-control select2  select2-hidden-accessible" tabindex="-1" aria-hidden="true" required="">
    <option value="">** Please choose the appropriate weight</option>
    <option value="2">1 Kg</option>
    <option value="3">1.5 Kg</option>
    <option value="4">2 Kg</option>
    <option value="5">2.5 Kg</option>
    <option value="1">600 g</option>
  </select>
</form>

0
ответ дан Anurag Srivastava 2 March 2019 в 08:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: