【问题标题】:Javascript popup doesn't work on next page paginationJavascript弹出窗口在下一页分页上不起作用
【发布时间】:2017-06-02 10:43:38
【问题描述】:

我已经使用 PHP 和 Javascript 构建了一个类似数据视图的项目。在我的页面上,它有一个使用分页的用户表。每行都有删除按钮。当我单击第一页上的该按钮时,它可以正常工作。当我单击下一页每一行的删除按钮时,看起来弹出窗口不再工作了。以下是我的代码:

运行弹出窗口的Javascript:

$(".mb-control").on("click",function(){
        var box = $($(this).data("box"));
        if(box.length > 0){
            box.toggleClass("open");

            var sound = box.data("sound");

            if(sound === 'alert')
                playAudio('alert');

            if(sound === 'fail')
                playAudio('fail');

        }        
        return false;
    });
    $(".mb-control-close").on("click",function(){
       $(this).parents(".message-box").removeClass("open");
       return false;
    });    

删除按钮的 PHP 脚本中的 HTML(在 while 函数中 - $i 是每行唯一 ID 的变量)

<?php

echo "<td>
	
	<button class='btn btn-warning mb-control btn-sm' href='./function/liststaff.remove.php?remove=".$getdata['username']."' data-box='#message-box-warning".$i."'>Remove <i class='glyphicon glyphicon-remove-circle'></i></button></a>
																
	<div class='message-box message-box-warning animated fadeIn' id='message-box-warning".$i."'>
	<div class='mb-container'>
	<div class='mb-middle'>
	<div class='mb-title'><span class='fa fa-warning'></span> Warning</div>
	<div class='mb-content'>
	<p>Are you sure want to delete user  <strong>".$getdata['username']." </strong>?.</p>                  
	</div>
	<div class='mb-footer'>
	<div class='pull-right'>
	<a href='index.php?delete=".$getdata['id']."' class='btn btn-success btn-lg'>Yes</a>
	<button class='btn btn-default btn-lg mb-control-close'>No</button>
	</div>
	</div>
	</div>
	</div>
	</div>
																
	</td>";

?>

请帮忙。

【问题讨论】:

  • var box = $($(this).data("box"));更改为var box = $(this).data("box");
  • 同理。还是不行。

标签: javascript php jquery pagination


【解决方案1】:

我认为包含按钮的分页行无法绑定到点击事件,因为它们是动态创建的:

试试这个:

$(document).on('click','.mb-control-close', function (event) {
        $(this).parents(".message-box").removeClass("open");
           return false;
    });

jsfiddle

【讨论】:

  • @KhalilIsmail 检查我在答案中发布的链接并执行alert 看看您是否可以提醒
  • @KhalilIsmail 总是使用 ctlr+F5 重新加载浏览器页面,它会加载一个新副本。
【解决方案2】:

对于动态内容的事件绑定,不应使用直接事件,而应使用委托事件。看看here

【讨论】:

    【解决方案3】:

    尝试在动态创建的元素上绑定 click 事件,如下所示,第二页 BUTTONS 类名称为 mb-control 在 DOM 上不存在,因此该事件仅附加到现有元素。

    希望对你有帮助。

     $("body").on("click",".mb-control-close",function(){
           $(this).parents(".message-box").removeClass("open");
           return false;
        });
    
    $("body").on("click",".mb-control",function(){
            var box = $($(this).data("box"));
            if(box.length > 0){
                box.toggleClass("open");
    
                var sound = box.data("sound");
    
                if(sound === 'alert')
                    playAudio('alert');
    
                if(sound === 'fail')
                    playAudio('fail');
    
            }        
            return false;
        });
    

    【讨论】:

    • 还是不行。顺便说一下,我使用 DataTables.net 中的 DataTables 1.10.9 版进行分页
    • 又做了一次,但还是一样。
    • 顺便说一下,当我把那个 Javascript 放在同一个文件上时,它会在下一页上工作,但在第一页上不工作。当我将该 Javascript 放在其他文件上时,第一页将正常工作,但在下一页停止工作。当我将 Javascript 放在双页面(相同和其他文件)上时,第一页上的弹出窗口停止工作。我不知道该怎么办。
    • @KhalilIsmail 检查您的控制台,当您单击秒页面上的删除按钮时显示的内容?
    • 谢谢,在我清除浏览器上的缓存后,使用您的代码看起来它现在可以工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多