如何获取父类的最接近的表单元素。 jQuery的

时间:2014-11-13 16:42:16

标签: javascript jquery html forms pug

我正在尝试在我的博客评论中添加投票按钮。我循环遍历每个评论:

.row
    for comment in Comments
        .row
            p #{comment}
            .votecell(style='width:30px;float:left;margin-left: 15px;')
                .voteUp(id='#{comment.id}', style='margin-bottom: -17px;') ▲
                            form.form-horizontal(id='voteUp', enctype="multipart/form-data", method='POST')
                                input(type='hidden', name='_csrf', value=_csrf)
                                input(type='hidden', name='commentID', value='#{comment.id}')
                                <br>

然后使用jQuery我试图提交表单,该表单是单击按钮的子项。

$(".voteUp").click(function () {
    var form = $(this).closest(".form-horizontal")
    $(function(){
        $.ajax({
            url: '/voteUp', //the URL to your node.js server that has data
            type: 'POST',
            data:  form.serialize()
        }).done(function(data){

        }); 
    });
});

问题是,无论点击哪个voteUp按钮,它总是从页面上的第一条评论中提交表单。我知道这是因为在jQuery $(this)== this [0]中,但我不确定有哪些其他选项可用于引用被点击的对象。任何人都知道我如何抓住点击按钮的子形式?

这是html输出的样子:

<div id="5463ce6bd6e5e5d403e80b3f" style="margin-bottom: -17px;" class="voteUp">
    ▲
    <form enctype="multipart/form-data" method="POST" class="form-horizontal">
        <input type="hidden" name="_csrf" value="4JbLbnEcRvq7ZuAhpZCXavMq7JW/vnIZlxW/o=">
        <input type="hidden" name="commentID" value="5463ce6bd6e5e5d403e80b3f">
    </form>
</div>

3 个答案:

答案 0 :(得分:2)

您可以尝试使用 .next()方法。

$('.voteUp').next('.form-horizontal')

那将选择具有form-horizo​​ntal类的下一个元素,并且只选择那个。

这是文档 - 看看它是否是你需要的。 http://api.jquery.com/next/

答案 1 :(得分:1)

尝试使用儿童代替最近的儿童。 http://jsfiddle.net/hLraqdq1/

$(".voteUp").click(function () {
    var form = $(this).children(".form-horizontal");
    $(function(){
        $.ajax({
            url: '/voteUp', //the URL to your node.js server that has data
            type: 'POST',
            data:  form.serialize()
        }).done(function(data){

        }); 
    });
});

答案 2 :(得分:1)

所以主要的问题是你在DOM树中走错了方向。

closest()从当前选择器开始,查找祖先的树,但是你想要寻找后代。

只需使用find()代替closest()

参考文献:

<强> closest() API docs

<强> find() API docs