2015-06-22 2 views
1

У меня возникли проблемы с получением текстового окна, ближайшего к моей выбранной радиокнопке. Вот что я пробовал до сих пор, что продолжает возвращать меня «неопределенным».Получение ближайшего текстового поля к переключателю в таблице

HTML:

<fieldset class="capacity-field"> 
    <legend>Capacity</legend> 
    <table style="margin-bottom: 20px"> 
     <tr> 
      <td> 
       <input type="radio" name="capacity" value="raw" checked>Raw (TB): 
      </td> 
      <td> 
       <input type="text" name="raw-capacity" value="256" size="2"> TB 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <input type="radio" name="capacity" value="usable">Usable (TB): 
      </td> 
      <td> 
       <input type="text" name="usable-capacity" value="161.28" size="2"> TB 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <input type="radio" name="capacity" value="effective">Effective (TB): 
      </td> 
      <td> 
       <input type="text" name="effective-capacity" value="161.28" size="2"> TB 
      </td> 
     </tr> 
    </table> 

JavaScript/JQuery

function cap_growth_update(toUpdate) { 
    var capacity = $("input[name='capacity']:checked").next("input[type='text']").val(); 
    alert(capacity); 
} 

$(document).ready(function(){ 
    cap_growth_update("T"); 
}); 

Я знаю значение toUpdate произвольно в этой точке, но она будет использоваться как селектор позже вниз по линии и, таким образом, включен.

+0

Вы должны использовать '.next', если хотите найти элемент внутри родительского элемента базового элемента, который находится рядом с ним. В вашем случае родителем 'capacity' является' td', но у него нет других элементов, и нечего возвращать. – klenium

ответ

4

JQuery() ищет родственный элемент, но поскольку эти элементы разделены в различных элементах TD, вам придется подняться вверх по DOM:

$("input[name='capacity']:checked").closest("tr").find("input[type='text']").val(); 

Итак, что он делает, это перейти к ближайшему родительскому объекту, а затем выполнить поиск ввода текста для детей.

+0

Элегантное читаемое решение. Спасибо – 99ProblemsAndTheyreAllCode

1

Попробуйте использовать parents() с eq() и find()

$("input[name='capacity']:checked").parents().eq(1).find("input[type='text']").val(); 

Примечание это только предложение, которое я сделать на основе разметке, ваша цель может быть достигнута другими способами (JQuery богатая библиотека для обхода и манипулировать DOM)

следующая функция
+0

Не могли бы вы объяснить это? Я действительно не хочу уходить с ответом, не понимая его логики. – 99ProblemsAndTheyreAllCode

0
$(function() { 
    $("input:radio").click(function() { 
     if ($(this).is(":checked")) { 
      var value = $(this).closest("tr").find("input:text").val(); 
     } 
    });  
}); 

проверяет код для события щелчка на элементе радио затем проверить, если элемент выбран, если он установлен, то получить родительскую строку элемента радио, найти входной текст в строке получить значение от входного текста он сохраняет значение при значении var, поэтому вы можете делать все со значением :)

С уважением!

+3

Пожалуйста, подумайте над тем, чтобы добавить хотя бы небольшое предложение, чтобы объяснить, почему и как ваш фрагмент кода отвечает на вопрос OP. –

+0

Хорошо, я новичок в этом :) код проверяет событие клика на элементе радио, а затем проверяет, проверен ли элемент, если он установлен, затем получите родительскую строку радиоэлемента, найдите входной текст внутри row a получить значение входного текста, он сохраняет значение в значении var, поэтому вы можете делать все со значением :) С уважением! –

+0

Лучше. Теперь вместо комментария отредактируйте свой ответ и укажите это объяснение в самом ответе, и у вас будет хорошо написанный ответ. –