Jquery“点击”或“取消绑定”不适用于php循环

Posted

技术标签:

【中文标题】Jquery“点击”或“取消绑定”不适用于php循环【英文标题】:Jquery "On click" OR"unbind" not working with php loop 【发布时间】:2021-12-14 07:46:29 【问题描述】:

我正在使用 Jquery Ajax 和 php,我在我的控制器中使用 Ajax, 我有 php 循环和内部循环我有“显示更多按钮”,我有“显示更多”按钮和“最后评论”(来自 db),所以每当我点击“显示更多” 按钮...它的隐藏和“新 cmets”以及新的“ShowMore”按钮 (html) 将作为 Ajax Resonse 出现 但问题是每当我第一次点击“ShowMore”按钮时,它的工作和 数据(新评论和显示更多按钮)作为 ajax 响应出现,但如果我下次点击“ShowMore”(作为 Ajax 响应出现)则没有任何效果,我尝试使用以下功能

$('.show_more').unbind('click').bind('click', function (e)

使用上述功能“第二次单击”不起作用意味着“显示更多按钮”(作为 ajax 响应出现)不起作用 如果尝试使用以下代码,则多次功能工作/执行

$(document).on('click','.show_more',function()

这是我的循环代码和我的脚本代码,我哪里错了?我该如何解决这个问题?提前致谢。

function fetch()
    
        $FeedId; (dynamic)
        $FeedData = $this->M_main->GetFeedData(); // getting feed data from database
        foreach($FeedData as $feeds)
            
                if($feeds['flag']=="feed")
                    
                        $GetFeedComments = $this->M_main->GetFeedsComment($FeedId);
                        $TotalFeedsComments=$GetFeedComments['TotalRows'];
                        if($TotalFeedsComments>1)
                                
                                        $Loads='<div class="show_more_main" id="show_more_main'.$postID.'">
                                        <input type="hidden" name="fixs" value="'.$postID.'" id="fixs">
                                        <input type="hidden" name="MinValue" value="'.$postID.'" id="MinValue">
                                        <input type="hidden" name="FeedIdd" value="'.$FeedId.'" id="FeedIdd">
                                        <input type="hidden" name="MaxValue" value="'.$postID.'" id="MaxValue">
                                        <span id='.$postID.' data-val='.$postID.' data-status='.$postID.' class="show_more" title="Load more posts" data-feds='.$FeedId.'>Show more</span>
                                        <span class="loding" style="display: none;"><span class="loding_txt">Loading...</span></span>
                                                            </div>';
                                
                        
                    
            
    $pathss= base_url()."Main/GetFeedCommentsById"; 
             echo "
                <script>
                $('.show_more').unbind().click(function(e) 
                e.preventDefault(); 
                    var ID = $(this).attr('id');
                        var vals=$(this).data('val');
                        var feds=$(this).data('feds');
                        $('.show_more').hide();
                    $.ajax(
                            type:'POST',
                            url:'".$pathss."',
                            data:id:ID, vals:vals,
                            success:function(html)
                                $('#show_more_main'+ID).remove();
                                $('.postList'+feds).append(html);
                            
                        );
                    
                    );
                </script>
                ";

【问题讨论】:

javascript 需要加载到您的主页中(即不通过 Ajax)并停留在那里。它不应该是 Ajax 响应的一部分(从上面的 sn-p 中不清楚是否是) @ADyson:正如我提到的两个功能都可以“取消绑定”和“点击”但两者都有问题,这意味着如果我使用“取消绑定”然后只工作一次,如果我使用“点击”然后工作不止一次,我只想用一次,只要我点击按钮就会再次工作一次,就是这样 在 $(document).ready(function() ) 中编写你的 java 脚本代码 @Pramodkushwaha:意味着我必须写“文档准备好”......并在这之间放置代码? @Nisha 我明白这一切。这就是我给出建议的原因。你试过了吗? 【参考方案1】:

问题是您正在删除 ajax 成功消息上的 html 节点,并且事件侦听器消失了。

您应该再次将侦听器添加到新节点;

<script>
// Assign the event listener to a variable, to reuse it
let myEventListenerFunction = function(e) 
    e.preventDefault(); 
    var ID = $(this).attr('id');
        var vals=$(this).data('val');
        var feds=$(this).data('feds');
        $('.show_more').hide();
    $.ajax(
            type:'POST',
            url:'".$pathss."',
            data:id:ID, vals:vals,
            success:function(html)
                $('#show_more_main'+ID).remove();
                $('.postList'+feds).append(html);
                // Add event to a new node
                $('.show_more').unbind().click(myEventListenerFunction);
            
        );
    

$('.show_more').unbind().click(myEventListenerFunction);
</script>

【讨论】:

还是一样,实际上我的问题是“点击”或“解除绑定”,它的工作时间只有或多次 不附加“以前的”数据不起作用 我重写了答案,因为想法是正确的,但是问题出在内部节点上,无论如何都会被重写。在 ajax 成功后,您应该再次添加事件 第二次点击不适用于您的代码 新的 html 代码包含具有正确名称和类的节点?【参考方案2】:

您的代码存在一些问题,但如果您只是想让它工作,因为我认为最好的方法是将 javascript 部分与其他部分分开。 实现此目的的一种方法是将页面中的此脚本添加到单独的 js 文件中

<script>
$(document).on('click','.show_more',function(e) 
                e.preventDefault(); 
                        var $self = $(this);
                        var ID = $self.attr('id');
                        var vals=$self.data('val');
                        var feds=$self.data('feds');
                        $('.show_more').hide();
                        var url = $self.data('url');
                        
                    $.ajax(
                            type:'POST',
                            url: url,
                            data:id:ID, vals:vals,
                            success:function(html)
                                $self.remove();
                                $('.postList'+feds).append(html);
                            
                        );
                    
                    );
</script>

在 php 部分你必须有一个这样的属性

$Loads='<div class="show_more_main" id="show_more_main'.$postID.'" data-url="'.$pathss.'">...</div>';

【讨论】:

以上是关于Jquery“点击”或“取消绑定”不适用于php循环的主要内容,如果未能解决你的问题,请参考以下文章

在jquery中禁用绑定点击事件

Jquery点击功能不适用于所有ID

jquery自动完成不适用于JSON数据

jQuery不适用于通过PHP回显的元素

PHP/jQuery S3 上传不适用于带空格的文件

使用 php 对 Mysql 的 Ajax JQuery 请求不适用于 JSON