Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript DataTables:确认用户希望进入页面_Javascript_Jquery_Ajax_Datatables - Fatal编程技术网

Javascript DataTables:确认用户希望进入页面

Javascript DataTables:确认用户希望进入页面,javascript,jquery,ajax,datatables,Javascript,Jquery,Ajax,Datatables,我们有许多jQuery数据表,它们都使用服务器端处理。我们已经设置了分页和排序功能,一切正常。在这些表中,至少有一列复选框允许选择要对其进行某种处理的行。如果选中了任何复选框,我们希望确认用户希望分页或排序 我认为我能做什么(也不能) 起初我以为这会很简单,但现在,它变得有点沉重,我不确定什么是正确的方式。我正在尝试使用fnPreDrawCallback,最初我打算创建并显示一个jQueryUI对话框,并让按钮确定是否返回false退出回调,从而停留在页面上,或允许页面/排序通过 我现在明白ja

我们有许多jQuery数据表,它们都使用服务器端处理。我们已经设置了分页和排序功能,一切正常。在这些表中,至少有一列复选框允许选择要对其进行某种处理的行。如果选中了任何复选框,我们希望确认用户希望分页或排序

我认为我能做什么(也不能) 起初我以为这会很简单,但现在,它变得有点沉重,我不确定什么是正确的方式。我正在尝试使用fnPreDrawCallback,最初我打算创建并显示一个jQueryUI对话框,并让按钮确定是否
返回false退出回调,从而停留在页面上,或允许页面/排序通过

我现在明白javaScript不是这样工作的。我想我将不得不做以下事情,但在我遇到麻烦之前,我想问问是否有一种更简洁(和可重用)的方法来做到这一点

  • 在fnPreDrawCallback中,获取描述预期设置页面/排序的属性(例如偏移量、页面大小、sSortDir、iSortCol等)
  • 通过对话框确定是继续还是停留在页面上
  • 使用上述属性为datatable构造GET以绕过FNPREDRAW回调
我是不是让事情变得更困难了?当然,我不是第一个想这样做的人,但就我的一生而言,我可以找到一个例子,或者我不能找出我应该搜索的关键字

有什么帮助吗?

链接到工作示例:

正如在对问题的评论中已经讨论过的,我试图绕过DataTables的默认行为来满足您的需要,并创建了一个示例来展示,包括编号分页和排序

基本上,您需要解除DataTables-plugin绑定到其组件的事件处理程序的绑定,如下所示:

$('.dataTables_paginate a').unbind();
$('.dataTables_wrapper thead th').unbind();
使用不带参数的
.unbind
将解除元素上任何事件侦听器的绑定,因此使用此选项时要小心

令人高兴的是,DataTables-API提供了一些函数,允许您自己调用内部分页和排序方法,命名为and

为了简单起见,我只使用了一个
确认
-框来请求用户交互:

var userInteraction = confirm("Do you really want to change the page?");

if(userInteraction){
    oTable.fnPageChange(dir);
    $('.dataTables_paginate span a').unbind();
}
但是您所需要做的就是调用
“Leave Page”
回调函数中的DataTables函数,您已经在代码中提供了回调函数

注意:当涉及到分页的编号按钮时:似乎每次分页更改时DataTables都会重新生成这些按钮,因此每次页面更改后,我需要再次解除事件处理程序的绑定

其余的代码很简单,但不是很优雅,在其中我只是查找某些类,以了解单击了什么按钮或排序头处于什么状态

摘录:

var dir = "",
    $this = $(this);

if($this.hasClass('previous')){
    dir = "previous";
}else if ($this.hasClass('next')){
    dir = "next";
}else if($this.hasClass('first')){
    dir = "first";
}else if($this.hasClass('last')){
    dir = "last";
}else{
    dir = parseInt($this.text(),10)-1;
}
链接到工作示例:

正如在对问题的评论中已经讨论过的,我试图绕过DataTables的默认行为来满足您的需要,并创建了一个示例来展示,包括编号分页和排序

基本上,您需要解除DataTables-plugin绑定到其组件的事件处理程序的绑定,如下所示:

$('.dataTables_paginate a').unbind();
$('.dataTables_wrapper thead th').unbind();
使用不带参数的
.unbind
将解除元素上任何事件侦听器的绑定,因此使用此选项时要小心

令人高兴的是,DataTables-API提供了一些函数,允许您自己调用内部分页和排序方法,命名为and

为了简单起见,我只使用了一个
确认
-框来请求用户交互:

var userInteraction = confirm("Do you really want to change the page?");

if(userInteraction){
    oTable.fnPageChange(dir);
    $('.dataTables_paginate span a').unbind();
}
但是您所需要做的就是调用
“Leave Page”
回调函数中的DataTables函数,您已经在代码中提供了回调函数

注意:当涉及到分页的编号按钮时:似乎每次分页更改时DataTables都会重新生成这些按钮,因此每次页面更改后,我需要再次解除事件处理程序的绑定

其余的代码很简单,但不是很优雅,在其中我只是查找某些类,以了解单击了什么按钮或排序头处于什么状态

摘录:

var dir = "",
    $this = $(this);

if($this.hasClass('previous')){
    dir = "previous";
}else if ($this.hasClass('next')){
    dir = "next";
}else if($this.hasClass('first')){
    dir = "first";
}else if($this.hasClass('last')){
    dir = "last";
}else{
    dir = parseInt($this.text(),10)-1;
}

当您现在返回
false
时会发生什么情况?现在它似乎会继续执行函数并继续进行分页/排序。执行不会等待按钮按下或返回。它显示对话框,绑定按钮,然后假设它可以继续。哦,我明白了,它当然不会等待。不幸的是,我自己现在真的想不出一个优雅的解决方案。作为一个快速修复,您可以将处理程序绑定到分页和排序链接,停止默认行为,并在用户做出选择后自己调用API函数。在API()中查看
fnPageChange
fnSort
,CodeWarrior听起来像是要截获分页并根据用户的输入停止分页。。。这里有一个类似的解决方案,我自己也不知道。您可以尝试在DataTables论坛上发布。艾伦在那里很活跃。是的,我看到了。并于昨天寄出。但是,还没有回复。当您立即返回
false
时会发生什么?此时,它似乎会继续执行该函数并继续进行分页/排序。执行不会等待按钮按下或返回。它显示对话框,绑定按钮,然后假设它可以继续。哦,我明白了,它当然不会等待。不幸的是,我自己现在真的想不出一个优雅的解决方案。作为一个快速修复,您可以将处理程序绑定到分页和排序链接,停止默认行为,并在用户做出选择后自己调用API函数。在API()中查看
fnPageChange
fnSort
,CodeWarrior听起来像是要截获分页并根据用户的输入停止分页。。。这里有一个类似的我不知道