2013-03-24 2 views
1

скажем, у меня есть две дивы, как это:JQuery этот контекст

<div class="myDiv"> 
    <textarea class="info_box" attribute="first" rows="4" cols="40">Enter text here...</textarea> 
    <button class="submit_btn">Click me!</button> 
</div> 

<div class="myDiv"> 
    <textarea class="info_box" attribute="second" rows="4" cols="40">Enter text here...</textarea> 
    <button class="submit_btn">Click me!</button> 
</div> 

Я хочу, чтобы иметь возможность получить текстовое поле внутри каждого DIV, когда я нажимаю на моей кнопке 'submit_btn. Я пытался что-то вроде этого:

$('body').delegate('.myDiv .submit_btn', 'click', function(){ 
    var myTextarea = $('.info_box', this); 
}); 

Но что возвращает неопределенное

Любая помощь, пожалуйста,

ответ

2

Вы можете сделать это:

$('body').delegate('.myDiv .submit_btn', 'click', function(){ 
    var myTextarea = $(this).closest('myDiv').find('.info_box'); 
}); 

Другое решение:

$('body').delegate('.myDiv .submit_btn', 'click', function(){ 
    var myTextarea = $(this).siblings('.info_box'); 
}); 

Обратите внимание, что если у вас версия jQuery более поздняя, ​​чем 1.7, лучше использовать on вместо delegate.

1

Это потому, что this находится в пределах .myDiv .submit_btn и внутри там текстовое поле не существует. Возможно, попробуйте this.parentNode как область действия.

0

так что если вы хотите, чтобы получить текстовое поле, то почему бы не просто сделать это

$('.submit_btn').on('click',function(){ 
    var myTextarea= $(this).siblings(".info_box"); 
}); 

fiddle

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