带有注释ID的jQuery脚本

时间:2016-06-28 作者:kiarashi

我的html如下所示(简化)

$args = array(...);
    
$comments_query = new WP_Comment_Query;
$comments       = $comments_query->query( $args );  
    
foreach ($comments as $comment) { 

    <a class="respond-to-messages" href="#<?php echo $comment->comment_ID; ?>">Reply to message</a>
    
        <div id="comment-<?php echo $comment->comment_ID; ?>" class="comment-respond-form post-id-<?php echo $comment->comment_post_ID; ?>">
            <table>
                <tr>
                    <form id="custom_comments-form" action="" method="post">
                        
                        //form fields
                        
                        <button class="uk-button" type="submit">Send</button>
                    </form>
                </tr>
            </table>
            </div> 

}

enter image description here

我的jquery

jQuery(function ($) {   
    $(document).ready(function(){

        $(".comment-respond-form").hide();
        $(".respond-to-messages").show();

        $(\'.respond-to-messages\').on(\'click\',function(){            
            $(this).text($(this).text() == \'Reply to message\' ? \'Hide form\' : \'Reply to message\');          
            
            $(".comment-respond-form").slideToggle(function(){
                if($(\'.comment-respond-form\').height() > 0) {
                    $(\'html, body\').animate({
                        scrollTop: $("comment-respond-form").offset().top
                    }, 1000);
                }
            });
        });

    });
}); 
因为我们处在一个有多条评论的循环中,.comment-respond-form 实际上应该是comment-<?php echo $comment->comment_ID; ?>但是jquery脚本是在循环之外添加的(在页脚和.js文件中)。

非常感谢您的帮助。

编辑:(我们快到了)

我创建了一个额外的按钮来展开/折叠所有表单

<button class="collapse-forms" href="#">Collapse All</button>

$(\'.collapse-forms\').on(\'click\',function(){         
            $(this).text($(this).text() == \'Collapse All\' ? \'Expand All\' : \'Collapse All\');             
            
            $(".comment-respond-form").slideToggle(function(){
                
                
            });
        });
但我注意到以下几点

enter image description here

如何修改我的代码,以便所有表单都将打开/关闭,而不管它们之前是关闭的还是打开的?

3 个回复
SO网友:Tyler Burden

检查javascript控制台是否有错误。

您不能在WordPress中使用$。将其替换为jQuery,但jQuery(函数($)除外。

SO网友:NateWr

我想你是在问怎么打电话.slideToggle() 仅在特定于每个评论的评论表单上。对吗?

如果是,您可以使用.next() 函数在jQuery中获取单击的链接后面的元素。

var $reply_form = $(this).next();
$reply_form.slideToggle(function(){
    if($reply_form.height() > 0) {
        $(\'html, body\').animate({
            scrollTop: $reply_form.offset().top
        }, 1000);
    }
});
这要求您的HTML代码看起来与您描述的一模一样.comment-respond-form 紧接着.respond-to-messages.

SO网友:Nitin Singh Chouhan

请在锚定标记中添加id属性。请使用jQuery查看此工作代码。。

foreach ($comments as $comment) {

<a class="respond-to-messages" id="<?php echo $comment->comment_ID; ?>" href="#<?php echo $comment->comment_ID; ?>">Reply to message</a>

    <div id="comment-<?php echo $comment->comment_ID; ?>" class="comment-respond-form post-id-<?php echo $comment->comment_post_ID; ?>">
        <table>
            <tr>
                <form id="custom_comments-form" action="" method="post">

                    //form fields

                    <button class="uk-button" type="submit">Send</button>
                </form>
            </tr>
        </table>
        </div> 
} 


jQuery(\'.respond-to-messages\').click(function(){ 

  jQuery(".comment-respond-form").hide();

  var current_id = this.id;

  jQuery(\'#comment-\'+current_id).slideDown();

});
我希望这对你有帮助

请参阅您的代码示例https://jsfiddle.net/Ni3singhchouhan/q08vvq3v/

相关推荐

JQuery php请求返回一个奇怪的结果

我有一个奇怪的小故障发生在我身上,我不知道我是如何产生它的,或者它是否是正常的。我正在开发自己的插件,当一个足球队/足球队被输入到一个框中时,它会检查它是否已经在数据库中。以下是我的代码行add_action( \'admin_footer\', \'fws_teamcheck_javascript\' ); function fws_teamcheck_javascript() { ?> <script type="text/javascript">