是否可以确保在显示 confirm() 框之前渲染 addClass()
Is it possible to make sure addClass() is rendered before showing confirm() box?
在下面的代码中,确认框在addClass被渲染之前显示(即Safari 6.0.5)。 是否可以确保在显示 confirm() 框之前渲染 addClass()?
<style type="text/css">
.preview { background-color: #eee;width:100;height:100;color:red; }
.preview_s { border:3px solid blue;}
</style>
<script type="text/javascript">
function test(i)
{
$("#testdiv"+i).addClass('preview_s');
if (confirm('border not blue and checkmark not visible on some browsers until after choice is made'))
{
// Do confirmed thing here
} else {
// Abort
}
}
</script>
<form id="testform">
<div class="preview" id="testdiv1">test1</div>
<input type="checkbox" onclick="test(1);">
<div class="preview" id="testdiv2">test2</div>
<input type="checkbox" onclick="test(2);">
</form>
不幸的是,我没有带有 Safari 的 Mac,但这样的东西会起作用吗?
<script type="text/javascript">
function test(i)
{
$("#testdiv"+i).addClass('preview_s');
// wait 20 milliseconds before launching confirmation box
setTimeout(function(){
if (confirm('border not blue and checkmark not visible on some browsers until after choice is made')) {
// Do confirmed thing here
} else {
// Abort
}
}, 20);
}
</script>
听起来 DOM 在获得添加类的指令后无法足够快地触发。
您始终可以以小增量增加setTimeout
,以查看addClass
需要多长时间才能通过
编辑以提供...开箱即用的方法。
function runConfirm($div){
if($div.hasClass('preview_s')){
if (confirm('border not blue and checkmark not visible on some browsers until after choice is made')) {
// Do confirmed thing here
} else {
// Abort
}
} else {
runConfirm($div);
}
}
function test(i) {
var $div = $("#testdiv"+i);
$div.addClass('preview_s');
runConfirm($div);
}
这应该会给你你想要的,因为调用的函数会递归地调用自己,直到满足.hasClass()
。
由于您提供了 jsFiddle,请使用此答案对其进行更新。
我通过以下方式意识到它,但我没有使用它。因为在确认框打开之前是否附加类属性是模棱两可的,而且我不喜欢等待 80 毫秒。
const wrapper = button.closest('.js-item-row')
let needsSubmit = false
button.addEventListener('click', function(e){
if(!needsSubmit) {
e.preventDefault()
const message = button.getAttribute('data-confirm-message')
wrapper.classList.add('dynamicScaffold-destorying')
setTimeout(function(){
if(!confirm(message)){
wrapper.classList.remove("dynamicScaffold-destorying");
} else {
needsSubmit = true
button.click()
}
}, 80)
}
})
相关文章:
- Amd,希望确保某个东西总是最后执行
- 我如何才能确保计时器设置为每天4点半,所以我不会;不用在Javascript中提及某个日期
- 当选择组中的单选按钮时,jQuery addClass
- javascript addClass没有'似乎没有触发类的css
- $animate addClass在angular 1.3中不起作用
- gcloud节点-我如何确保通过签名URL上传到谷歌云存储的文件是公开可读的
- 如何确保在AngularJS中,数据在使用之前先加载
- 如何确保JQuery的一行在另一行之前运行
- <td> focusin event .addclass
- 什么是“;右“;使用addClass/delay/removeClass的方法
- addClass,它更改bg图像,但在第一次加载时没有闪烁
- 如何确保函数/方法参数为certian类型
- toggleClass/addClass不'不要输入
- jQuery addClass/removeClass转换不是平滑的,而是断断续续的
- 如何确保通过电子邮件发送的html文档中的Google Drive链接不会被识别为附件
- 如何确保变量范围在这个循环中得到维护
- removeClass(如果单击addClass)
- 使用$(el).addClass('example');但是不要't增加负载
- Meteor CollectionFS:在显示之前,请确保图像已上传
- 是否可以确保在显示 confirm() 框之前渲染 addClass()