2010-05-20 3 views
8

Привет У меня есть следующий HTML:JQuery находкой элемент рядом с другим

<p> 
    <input type="text" name="field1"/> <input type="hidden" name="fieldh1"/> 
    <button type="button" class="sendInfo">Send</button> 
</p> 
<p> 
    <input type="text" name="field2" /> <input type="hidden" name="fieldh2"/> 
    <button type="button" class="sendInfo">Send</button> 
</p> 

То, что я хочу, что, когда пользователь нажимает на кнопку, мне нужно отправить с помощью AJAX содержимое поля поля.

Это то, что я пытаюсь сделать без успеха.

$(function() { 
     $('button.sendInfo').live('click', function() { 
      var id = $(this).parent().next('[type=text]').val(); 
      alert(id); 
     }); 
    }); 

Я планирую установить, что пользователь вводит в текстовое поле в скрытом поле, и значение, полученное из Аякса вызова нормального текстового поля. Но проблема в том, что я даже не могу получить значение текстового поля, которое находится в той же строке, что и кнопка, которую пользователь нажимает. Может ли кто-нибудь мне помочь? Большое спасибо.

ответ

18

Try:

$(this).siblings('input:text').val(); 

Или изменить next к find:

$(this).parent().find('[type=text]').val(); 

в next ищет только сразу же следующее Sibling.

+1

ДА! Это прекрасно работает: $ (this) .parent(). Find ('[type = text]'). Val(); Спасибо за помощь человеку – thiagoleite

+0

найти только работает, если между ними нет ничего. – stuartdotnet

2

Я могу использовать jQuery.next() функция.

+1

Я попытался использовать next(), не смог заставить его работать. – thiagoleite

0

Можете ли вы выбрать свое текстовое поле с использованием идентификатора?

$(function() { 
    $('button.sendInfo').live('click', function() { 
     //what about this: 
     var id = $('#textBoxID').val(); 
     alert(id); 
     //or this 
     var id2 = $('+ input', this).val(); 
     alert(id2); 
    }); 
}); 
+1

Нет, потому что у меня много текстовых полей, и я не хочу устанавливать обработчики для них все индивидуально. Мне нужно идентифицировать текстовое поле прямо перед нажатой кнопкой – thiagoleite

+0

в порядке, так что, возможно, что-то, что похоже на второй вариант, должно работать ... – Rbacarin

1

Ваш вопрос в том, что «следующей()» будут следующим собрат родителя - и родитель является <p> тегом, поэтому брат, если он существует, является следующим <p> тегом.

Вы хотите $(this).parent().children('[type=text]').val() или $(this).parent().find('[type=text]')