jQueryUI selectmenu - включить / выключить выбор, если для другого выбора выбран определенный параметр - PullRequest
0 голосов
/ 04 декабря 2018

Я использую слегка измененную версию официального примера для этого вопроса.

enter image description here

Я пытаюсь деактивировать в меню выбора «Выбрать заголовок», если выбранная опция из меню выбора «Выбрать скорость» НЕ Fast.Если выбран Fast, то выбор должен снова активироваться.

Попытка:

$( function() {

  $( "#speed" ).selectmenu();
  $( "#salutation" ).selectmenu();
  
  $speed = $('#speed');
  $salutation = $('#salutation');
  test();
  

  $speed.on('selectmenuchange', function() {
	    test();
  });

  
  function test()
  {
      let selectedOption = $speed.find('option:selected').text().trim().toLowerCase();

      if ( ! selectedOption.includes('fast')) {
        $salutation.prop('disabled', 'disabled');
      } else {
        $salutation.removeAttr('disabled');

        $salutation.next().find('.ui-selectmenu-text').trigger("click");
      }
  }
  
});
fieldset {
  border: 0;
}
label {
  display: block;
  margin: 30px 0 0 0;
}
.overflow {
  height: 200px;
}

#
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>


 
<div class="demo">
 
<form action="#">
 
  <fieldset>
    <label for="speed">Select a speed</label>
    <select name="speed" id="speed">
      <option>Slower</option>
      <option>Slow</option>
      <option selected="selected">Medium</option>
      <option>Fast</option>
      <option>Faster</option>
    </select>
  
    <label for="salutation">Select a title</label>
    <select name="salutation" id="salutation">
      <option disabled selected>Please pick one</option>
      <option>Mr.</option>
      <option>Mrs.</option>
      <option>Dr.</option>
      <option>Prof.</option>
      <option>Other</option>
    </select>
  </fieldset>
</form>
</div>

Но, как вы можете видеть, он работает не так, как ожидалось.Любая подсказка приветствуется.

Jsfiddle

1 Ответ

0 голосов
/ 04 декабря 2018

Я нашел решение.Мне пришлось изменить функцию test() на это:

  function test()
  {
      let selectedOption = $speed.find('option:selected').text().trim().toLowerCase();

      //Hide
      if ( ! selectedOption.includes('fast')) {
        $salutation.selectmenu('disable');
      } else {
        $salutation.selectmenu('enable');
      }
  }

$( function() {

  $( "#speed" ).selectmenu();
  $( "#salutation" ).selectmenu();
  
  
  
  $speed = $('#speed');
  $salutation = $('#salutation');
  test();
  

  $speed.on('selectmenuchange', function() {
	    test();
  });

  
  function test()
  {
      let selectedOption = $speed.find('option:selected').text().trim().toLowerCase();

      //Hide
      if ( ! selectedOption.includes('fast')) {
        $salutation.selectmenu('disable');
      } else {
        $salutation.selectmenu('enable');
      }
  }
  
});
fieldset {
  border: 0;
}
label {
  display: block;
  margin: 30px 0 0 0;
}
.overflow {
  height: 200px;
}
  <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>


 
<div class="demo">
 
<form action="#">
 
  <fieldset>
    <label for="speed">Select a speed</label>
    <select name="speed" id="speed">
      <option>Slower</option>
      <option>Slow</option>
      <option selected="selected">Medium</option>
      <option>Fast</option>
      <option>Faster</option>
    </select>
  
    <label for="salutation">Select a title</label>
    <select name="salutation" id="salutation">
      <option disabled selected>Please pick one</option>
      <option>Mr.</option>
      <option>Mrs.</option>
      <option>Dr.</option>
      <option>Prof.</option>
      <option>Other</option>
    </select>
  </fieldset>
</form>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...