Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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
如何在切换选项卡之前使用“创建Jquery确认”对话框_Jquery_Jquery Ui_Jquery Dialog_Jquery Tabs - Fatal编程技术网

如何在切换选项卡之前使用“创建Jquery确认”对话框

如何在切换选项卡之前使用“创建Jquery确认”对话框,jquery,jquery-ui,jquery-dialog,jquery-tabs,Jquery,Jquery Ui,Jquery Dialog,Jquery Tabs,我正在使用jQuery1.9+ 我试图弹出一个Jquery对话框模式,允许用户在切换选项卡之前进行确认。 我尝试了以下代码: $('#tabs').tabs({ beforeActivate: function(event, ui) { $('<div> Confirm Switching Tab </div>').dialog({ modal: true, title: "Confirm Action", buttons:

我正在使用jQuery1.9+

我试图弹出一个Jquery对话框模式,允许用户在切换选项卡之前进行确认。 我尝试了以下代码:

$('#tabs').tabs({
  beforeActivate: function(event, ui) {

  $('<div> Confirm Switching Tab </div>').dialog({
      modal: true,
      title: "Confirm Action",
      buttons: {
          Yes: function(){
              $(this).dialog('close');
              return true;
          },
          No: function(){
              $(this).dialog('close');
               return false;
          }
      }
  });

 }
})
$('#制表符')。制表符({
beforeActivate:功能(事件、用户界面){
$(“确认切换选项卡”)。对话框({
莫代尔:是的,
标题:“确认行动”,
按钮:{
是:函数(){
$(this.dialog('close');
返回true;
},
否:函数(){
$(this.dialog('close');
返回false;
}
}
});
}
})
上面的代码确实弹出了确认对话框,但是它仍然打开选项卡,因为beforeActivate事件实际上是在用户单击对话框按钮返回true/false之前返回的

然后我提出了以下代码

$('#tabs').tabs({
  beforeActivate: function(event, ui) {

   $('<div> Confirm Switching Tab </div>').dialog({
      modal: true,
      title: "Confirm Action",
      buttons: {
          Yes: function(){
              $(this).dialog('close');
              $( "#tabs" ).tabs( "option", "active", ui.newTab.index());
          },
          No: function(){
              $(this).dialog('close');

          }
      }
  });

  return false;
 }
})
$('#制表符')。制表符({
beforeActivate:功能(事件、用户界面){
$(“确认切换选项卡”)。对话框({
莫代尔:是的,
标题:“确认行动”,
按钮:{
是:函数(){
$(this.dialog('close');
$(“#tabs”).tabs(“选项”,“活动”,ui.newTab.index());
},
否:函数(){
$(this.dialog('close');
}
}
});
返回false;
}
})
上面的代码无法打开选项卡,因为我在beforeActivate选项的末尾添加了“return false”。返回beforeActivate后,会弹出对话框,如果用户单击对话框上的“是”按钮,则会再次触发切换选项卡事件。但是,该对话框将再次弹出。这有点没完没了

我的问题是如何修改上面的代码来做到这一点。还是有更好的方法


提前感谢。

一个选项是存储一个变量,用于确定用户是否回答“是”。由于
ui.newTab
是一个jQuery对象,您可以将其存储在它的

$('#制表符')。制表符({
beforeActivate:功能(事件、用户界面){
如果(ui.newTab.data(“canOpen”)==true){
ui.newTab.data(“canOpen”,假);
返回true;
}
$(“确认切换选项卡”)。对话框({
莫代尔:是的,
标题:“确认行动”,
按钮:{
是:函数(){
ui.newTab.data(“canOpen”,真);
$(this.dialog('close');
$(“#tabs”).tabs(“选项”,“活动”,ui.newTab.index());
},
否:函数(){
$(this.dialog('close');
}
}
});
返回false;
}
})
在这里摆弄:

主要问题是,即使在您以编程方式切换选项卡时,也会触发

$( "#tabs" ).tabs( "option", "active", ui.newTab.index());
只要您一直按yes,就会导致无限循环-对话框将永远不会关闭(新对话框将一个接一个地打开)


我能想到的一个可能的解决方法是使用一个静态对话框,并使用保存一个布尔标志来指示事件是如何触发的

$('#制表符')。制表符({
beforeActivate:功能(事件、用户界面){
if(!$(“#对话框”).data(“已确认”){//if事件不是由用户触发的
event.preventDefault();//防止切换选项卡
$(“#dialog”).dialog(“open”).data(“ui”,ui);//打开对话框并传递信息
}
},
激活:功能(事件、用户界面){
$(“#对话框”)。数据(“已确认”,错误);
}
});
$(“#对话框”)。对话框({
自动打开:错误,
莫代尔:是的,
按钮:{
是:函数(){
var ui=$(this.data(“ui”);
//如果用户单击“是”,请将存储的数据更改为true,以避免重新打开对话框
$(此).dialog('close')。数据(“已确认”,true);
$(“#tabs”).tabs(“选项”,“活动”,ui.newTab.index());
},
否:函数(){
//如果用户单击“否”,请更改存储的数据,以便重新打开对话框
$(此).dialog('close')。数据(“已确认”,false);
}
}
});

青蒿素、金樱子、天妇罗、金樱子a、金樱子。库拉比图尔nec arcu。我坐在阿梅特·莫里斯旁边。这是一个很好的例子。埃蒂亚姆·阿利奎特·马萨和洛雷姆。毛里斯·达比乌斯·拉库斯·奥克托·里苏斯。埃尼安临时乌兰科珀酒店 狮子座。维瓦摩斯·塞德·马格纳·奎斯·利古拉·埃利弗德·阿迪皮斯。杜伊斯·奥奇。苏打水煎饼或同侧生命。阿利奎姆·努拉。我是阿利奎姆·莫莱斯蒂·埃拉特。这是一种新的葡萄品种。这是我的梦想。同侧相位。 努克·特里斯蒂克·坦普斯·莱克图斯

Morbi tincidunt,我坐在医院里,看医生,看医生,看医生,看医生。杜伊斯·塞勒里克·莫莱斯蒂·图皮斯。塞德·弗林利亚,马萨·埃吉特·卢克图斯·马莱苏阿达,梅特斯·厄洛斯·莫莱斯蒂·莱克托斯,我们的厄洛斯·多洛。埃尼安 aliquet-fringilla扫描电镜。悬钩子在舌苔中是舌苔。在爱神的前庭里祈祷。临床医生。库拉比图尔·奥纳雷·康塞奎特·努克。埃尼安·韦尔梅特斯。乌特·波苏尔·维韦拉·努拉。阿利奎姆·埃拉特·帕特。 佩伦茨克康瓦利斯。梅塞纳斯·费吉亚、佩伦特斯·普雷蒂姆·波苏尔、猫科动物奥勒姆·尤伊斯莫·费利斯、欧纳·利奥·尼西·维勒·费利斯。毛里斯·康塞德图尔·托托和珀鲁斯

毛里斯·埃利芬德和图皮斯。酒后驾车。潜力悬钩子。这是一种腐败,是一种腐败,是一种腐败,是一种腐败,是一种腐败,是一种腐败。前庭无前庭。每个科努比亚的社会责任等级 诺斯特拉,每一个接受者。Fusce苏打啤酒。这是一个很好的例子。这是一种很好的治疗方法。库拉比图尔·洛雷姆·埃尼姆、普雷蒂姆·内克、福吉亚·内克、卢克图斯·a、拉克斯

确认切换选项卡
事实上,我在这篇文章之后也提出了类似的解决方法。非常感谢您提供了清晰的工作代码片段。我将标记你为正确答案
$( "#tabs" ).tabs( "option", "active", ui.newTab.index());