我一直在做一个ASP.net的项目,这个项目使用了自定义的“模态对话框”。我在这里使用了引号,因为我知道“模态对话框”只是我的html文档中的一个div,它被设置为出现在文档其余部分的“顶部”,而不是真正意义上的模态对话框。
在网站的许多部分,我有这样的代码:
var warning = 'Are you sure you want to do this?';
if (confirm(warning)) {
// Do something
}
else {
// Do something else
}
这是可以的,但最好让确认对话框与页面其余部分的样式相匹配。
然而,由于它不是一个真正的模态对话框,我认为我需要写这样的东西:(本例中使用jQuery-UI)
<div id='modal_dialog'>
<div class='title'>
</div>
<input type='button' value='yes' id='btnYes' />
<input type='button' value='no' id='btnNo' />
</div>
<script>
function DoSomethingDangerous() {
var warning = 'Are you sure you want to do this?';
$('.title').html(warning);
var dialog = $('#modal_dialog').dialog();
function Yes() {
dialog.dialog('close');
// Do something
}
function No() {
dialog.dialog('close');
// Do something else
}
$('#btnYes').click(Yes);
$('#btnNo').click(No);
}
这是一个很好的方式来实现我想要的,或者有一个更好的方法吗?
9条答案
按热度按时间brtdzjyr1#
你可能需要考虑将它抽象成这样的函数:
然后,您可以像这样使用它:
j2datikz2#
你应该看看SweetAlert作为一个选项来保存一些工作。它从默认状态开始就很漂亮,并且是高度可定制的。
确认示例
zpjtge223#
为了使您能够像正常的确认对话框一样使用确认框,我将使用Promises,它将使您能够等待结果的结果,然后对其进行操作,而不必使用回调。
这将允许您遵循与代码其他部分相同的模式,例如…
例如,请参阅codepen,或运行下面的代码片段。
https://codepen.io/larnott/pen/rNNQoNp
x一个一个一个一个x一个一个二个一个x一个一个三个一个
fquxozlt4#
我将使用jQuery UI网站上给出的示例作为模板:
64jmpszr5#
i7uq4tfw6#
另一种方法是使用colorbox
e0bqpujr7#
面对同样的问题,我能够只用vanilla JS解决它,但是用一种丑陋的方式。更准确地说,用一种非过程的方式。我删除了所有函数参数和返回值,并用全局变量替换它们,现在函数只作为代码行的容器-它们不再是逻辑单元。
在我的例子中,我还需要许多确认(就像解析器处理文本一样)。我的解决方案是将所有内容都放在JS函数中的第一个确认中,该函数通过在屏幕上绘制我的自定义弹出窗口来结束,然后终止。
然后,弹出窗口中的按钮调用另一个函数,该函数使用答案,然后像往常一样继续工作(解析),直到下一次确认时,它再次绘制屏幕,然后终止。
这两个函数也都能识别工作何时完成--它们会做一些清理工作,然后就永远结束了。我付出的代价是优雅。
bwntbbo38#
如果你的代码中有很多confirm()操作,我设法找到了一个解决方案,它允许你使用默认的confirm()来完成这一点,而修改最少。这个例子使用了jQuery和Bootstrap,但同样的事情也可以使用其他库来完成。你可以只复制粘贴这个,它应该马上就能工作了
这是整个例子。在你实现它之后,你将能够像这样使用它:
if(confirm('Are you sure?',$(this))
yiytaume9#
我用下面的代码创建了一个js文件,并命名为newconfirm.js
在我的主php文件中,在javascript中调用confirm,像这样