【问题标题】:How to get closest form element of parent class. jQuery如何获取最接近父类的表单元素。 jQuery
【发布时间】:2014-11-13 16:42:15
【问题描述】:

我正在尝试向我的博客 cmets 添加投票按钮。我正在循环浏览每条评论:

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

【问题讨论】:

  • 那个奇怪的符号是什么?
  • 如果您发布生成的 HTML 块会很有帮助
  • 请显示示例输出 html 而不是服务器代码。 voteUp 似乎没有出现在开头的表单中
  • 它的玉。 jade-lang.com
  • 您似乎为每个表单赋予了相同的“id”值,这可能会导致问题。

标签: javascript jquery html forms pug


【解决方案1】:

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

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

这将选择具有 form-horizo​​ntal 类的下一个元素,仅此而已。

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

【讨论】:

  • 尝试使用 .next() 并返回页面上第一条评论的表单。点击任何 .voteUp 按钮总是会提交第一个评论的表单。我认为问题在于 $(this) 始终是对具有该类名的第一个 div 的引用。
  • next() 寻找兄弟,表单是后代而不是兄弟
【解决方案2】:

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

closest() 从当前选择器开始并在树中查找祖先,但您想要查找后代。

只需使用find() 而不是closest()

参考资料:

closest() API docs

find() API docs

【讨论】:

    【解决方案3】:

    尝试使用孩子而不是最接近的。 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){
    
            }); 
        });
    });
    

    【讨论】:

    • .children() 似乎没有找到任何表单并提交没有数据的 ajax 调用。
    • 你能在这里粘贴一些生成的 HTML 吗?这将使调试脚本更容易!谢谢。
    • 嗯,好像没有“form-horizo​​ntal”类的表单!
    • 抱歉正在尝试一些更改。现在改回原来的输出。
    • 这是一个更新的 JSFiddle:jsfiddle.net/hLraqdq1/3 一切似乎都运行良好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    相关资源
    最近更新 更多