Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Условный оператор jquery для 2 элементов формы с одним и тем же классом

Автор вопроса: CommunityОтветов: 1

Это, вероятно, простой вопрос, но я не могу понять, поэтому я спрашиваю сообщество.

У меня есть список выбора и текстовое поле в форме. У них обоих один и тот же класс.

Я хочу найти чистый условный оператор, который позволит мне отключить набор переключателей в другой части формы, если текстовое поле не пусто И в списке выбора выбрано значение, отличное от значения по умолчанию.

Пока я могу заставить его работать только для текстового поля:

$('.affector').change(function(){
if ($(this).val() !== '') {
 $(this).parents('tr').find('input:radio').attr('disabled', false);
 } else {
 $(this).parents('tr').find('input:radio').attr('disabled', true);
 }
});

.. и это работает при первоначальном изменении списка выбора, но по какой-то причине я не могу понять, как заставить "еще" часть условного выражения срабатывать, если я снова выберу значение по умолчанию (и текстовое поле пусто).

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

Любые идеи?

ОБНОВЛЕНИЕ: вот HTML...

<tr bgcolor=#ffffff>
   <td valign=center>
      Batter # 1
      <div id="txtResult1">
      <select name="player1" class="affector">
      <option></option> //dynamically populated
      </select>
      </div>

      <input type="text" id="PlayerLocal1" class="affector" name=p1name size=20>
    </td>
    <td>
      <table border=1>
        <tr>
          <td>
        <table border=0 cellspacing=0 cellpadding=0>
            <tr>
                <td><input type=radio name=p1o1 value="1B">1B</td>
                <td><input type=radio name=p1o1 value="FO">FO</td>
           </tr>
       </table>
         </td>
        </tr>
      </table>
    </td>
</tr>
  • != вместо !== может помочь... munch 11.01.2010
  • Вы можете показать соответствующий html? Brandon Henry 11.01.2010
  • хорошо, добавил HTML. По сути, поля выбора/текста находятся в одном TD, и их изменение должно отключить переключатели. tresstylez 11.01.2010
  • Кто-нибудь может убрать это с вики сообщества? Tom Bartel 12.01.2010

jqueryselectconditional

Ответы

Ответ 1 · рейтинг 1 · Community

Сейчас вы проверяете только одно значение вместо обоих, если я правильно понимаю. То есть, если срабатывает событие change элемента select, проверяется только значение выбранного элемента, а если срабатывает событие change текстового поля, проверяется только значение текстового поля. Однако вы хотите, чтобы оба были проверены (И), поэтому я предлагаю что-то вроде этого:

$('.affector').change(updateRadioEnabled);

function updateRadioEnabled() {
    var valueGiven = true;
    $('.affector').each( function() {
        if ($(this).val() == "") {
            valueGiven = false;
        }
    });
    var radio = $('.affector:first').parents('tr').find('input:radio');
    if (!valueGiven) {
        radio.attr('disabled', true);
    } else {
        radio.removeAttr('disabled');
    }
}

РЕДАКТИРОВАТЬ: Примечания. Вики сообщества обычно предназначена для вопросов, которые предполагают обмен мнениями, в отличие от четких технических ответов. Ваш вопрос явно технический.

.affector:first найдет первый элемент с классом affector и прекратит поиск. Я часто делаю это для эффективности (однако см. комментарий Брэндона ниже). Здесь я просто выбираю этот элемент, чтобы иметь отправную точку для поиска переключателей. Вероятно, есть более элегантное решение.

РЕДАКТИРОВАТЬ: Кстати, почему это сообщество вики?

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы