2010-02-04 4 views
1

Используя это как упрощенный пример, предположим, что у меня есть таблица с несколькими переключателями в ней, за которой следует элемент div со ссылкой в ​​нем. Эта картина повторяется некоторое неизвестное количество раз, как так:jQuery: выбор первого экземпляра элемента, который происходит после другого указанного элемента.

<table class="rdoBtnList"> 
    <tbody> 
     <tr> 
      <td> Person 1 </td> 
      <td> 
      <label for="rb1">Verified</label> 
      <input type="radio" id="rb1" name="rdoBtns" value="Verified" /> 
      <label for="rb2">Not Verified</label> 
      <input type="radio" id="rb2" name="rdoBtns" value="NotVerified" /> 
      </td> 
     </tr> 
    </tbody> 
</table> 
<div class="PersonLink"><a href="#">Link to Person 1 page</a></div> 
    ..... tables and divs for person 2, 3, ... n, etc 

Я хотел бы иметь возможность использовать JQuery, чтобы включить/отключить ссылку в DIV следующих кнопок радио на основе значения переключателя , Я могу получить значение переключателей, но не могу понять, какой синтаксис селектора я использовал бы для включения/выключения только div после переключателей.

Вот мой JQuery до сих пор:

<script type="text/javascript"> 
     $(document).ready(function() { 
      $(".rdoBtnList > tbody > tr > td > input").change(function() { 
      if ($(this).val() == "Verified") { 
       // select the link in the div following the table and enable it 
      } else { 
       // select the link in the div following the table and disable it 
      } 
     }); 
     }); 
    </script> 

ответ

4

Как это:

$(this).closest('.rdoBtnList').nextAll('.PersonLink:first').children('a').whatever 

closest('.rdoBtnList') найти таблицу, и nextAll('.PersonLink:first') будет найти первый .PersonLink после таблицы.

Кстати, функция val возвращает нормальное булево значение. Вы должны написать if($(this).val()).

+0

Этот подход выглядит неплохо, хотя в моем жизненном коде мне в итоге пришлось немного поработать, чем в этом примере. Ваш код показал мне, как это сделать! Также 'if ($ (this) .val() ==" True ")' был опечаткой с моей стороны и должен был быть 'if ($ (this) .val() ==" Verified ")'. Я отредактировал свой пост, чтобы это отразить. Благодаря! – hotbot86

0

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

<table>... 
    <input type="radio" id="personXrb1" class="personXselector" ... 
<div> 
<a href="personXlink" id="personXselector">link to person X</a> 

Это должно быть относительно легко, как я ожидаю, что HTML генерируется программно. Правильно? Он также будет менее подвержен ошибкам из-за изменений кода и, возможно, будет легче читать. Выбор

бы тогда не сделать с $ (это) .closest и т.д., что не гарантирует работу после изменения кода вокруг, но вместо того, чтобы через

$('#' + $(this).attr('class')).doStuff(); 

Я также не уверен, что включение/disable будет работать с div или a-тегом, вам может быть лучше использовать fadeOut() и fadeIn() или просто show() и hide() для «отключения» ссылок.

+0

Спасибо за ответ. Я не мог изменить идентификатор, поскольку они генерируются через asp.net в устаревшем коде, который я не мог изменить. В итоге я просто скрыл связь с функцией css(). – hotbot86

Смежные вопросы