检查样式,然后使用jQuery插入元素一次
我正在尝试编辑一个插件生成的弹出窗口,因此我对HTML文件的访问权限有限,无法进行编辑。因此,我尝试使用jQuery 基本上,一旦弹出窗口的样式更改为显示,我想向弹出窗口本身添加文本。我目前的设置方式是这样的,基于给出的答案检查样式,然后使用jQuery插入元素一次,jquery,Jquery,我正在尝试编辑一个插件生成的弹出窗口,因此我对HTML文件的访问权限有限,无法进行编辑。因此,我尝试使用jQuery 基本上,一旦弹出窗口的样式更改为显示,我想向弹出窗口本身添加文本。我目前的设置方式是这样的,基于给出的答案 函数更改(){ if($('.bold_lightbox').css('display')=='block'){ console.log('显示lightbox'); $(“定价信息在此处显示)”).insertAfter(“.bold\u option\u set”);
函数更改(){
if($('.bold_lightbox').css('display')=='block'){
console.log('显示lightbox');
$(“定价信息在此处显示)”).insertAfter(“.bold\u option\u set”);
}否则{
console.log('lightbox不可见');
}
设置超时(更改,1000);
}
设置超时(更改,1000);
这可以工作,并成功地将文本添加到弹出窗口中。但是,它每秒钟都会继续检查一次,这反过来又会一次又一次地复制段落,直到弹出窗口关闭为止
我希望在添加一次段落后,能够停止添加该段落。可以使用标志检查文本是否已添加,如下所示:
var done=false;
function change() {
if ($('.bold_lightbox').css('display') == 'block') {
console.log('lightbox is shown');
$('<p>Pricing Information Goes Here</p>').insertAfter('.bold_option_set');
done = true;
} else {
console.log('lightbox is not visible');
}
if(!done)
setTimeout(change, 1000);
}
setTimeout(change, 1000);
var done=false;
函数更改(){
if($('.bold_lightbox').css('display')=='block'){
console.log('显示lightbox');
$(“定价信息在此处显示)”).insertAfter(“.bold\u option\u set”);
完成=正确;
}否则{
console.log('lightbox不可见');
}
如果(!完成)
设置超时(更改,1000);
}
设置超时(更改,1000);
嗨太好了,对我来说很有效。有一个问题是,有没有办法调整它,使重新打开弹出窗口再次开始这个过程?@SamJohnson肯定弹出窗口有类似onclose或ondestroy事件的东西。它可能取决于您在何处声明此函数,但您可以声明
var done=false代码>在某个地方,你可以在这里和事件处理程序内部使用它,在那里你可以将它重置为false,这样下次弹出窗口再次显示时,变量就准备好了,明白了吗?恐怕我不太清楚你的意思。也许我使用的“弹出”是不正确的。它基本上是一个用CSS显示和隐藏的div。@SamJohnson在发布问题时尽量包含所有相关信息/代码。好吧,如果你只是在创建和操作一个div,那么应该会更容易,因为你可以完全控制它,现在你所要做的就是done=false代码>在你隐藏div的位置/时间内,试试看,对不起,我肯定不清楚。因此,在单击按钮显示弹出div之前,弹出div实际上并不存在。这一切都是通过第三方Shopify插件完成的,所以我实际上无法访问执行此操作的代码。因此,我不认为我可以添加done=false代码>在它里面。
var done=false;
function change() {
if ($('.bold_lightbox').css('display') == 'block') {
console.log('lightbox is shown');
$('<p>Pricing Information Goes Here</p>').insertAfter('.bold_option_set');
done = true;
} else {
console.log('lightbox is not visible');
}
if(!done)
setTimeout(change, 1000);
}
setTimeout(change, 1000);