jquery这个上下文

时间:2013-03-24 21:10:13

标签: javascript jquery

假设我有两个这样的div:

<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>

当我点击我的按钮'submit_btn'时,我希望能够获得每个div中的textarea。我试过这样的事情:

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

但是返回undefined

请帮助

3 个答案:

答案 0 :(得分: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 :(得分:1)

这是因为this的范围是.myDiv .submit_btn,而在那里,textarea不存在。也许尝试this.parentNode作为范围。

答案 2 :(得分:0)

所以,如果你想获得textarea,为什么不简单地这样做

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

fiddle