jquery 如何在索引页面上设置复选框状态并在iframe中切换内容

kuhbmx9i  于 2023-08-04  发布在  jQuery
关注(0)|答案(1)|浏览(113)

我试图建立一个黑暗和光明模式之间的切换;但是我很难让我的iframe跟随开关。。
以下是我目前的jQuery:

$(document).ready(function() {
  var switched = $('#mode');
  
  switched.on("change", function(){
    if (switched.is(':checked')){
      $('html').removeClass('dark');
      $('html').addClass('light');
      localStorage.setItem('mode','light');
    }
    else{
      $('html').removeClass('light');
      $('html').addClass('dark');
      localStorage.setItem('mode','dark');
    }
  });
  var mode = localStorage.getItem('mode');
  if (mode == 'dark') {
    switched.prop( "checked", false );
    $('html').removeClass("light");
    $('html').addClass("dark");
  }
  if (mode == 'light') {
    switched.prop( "checked", true );
    $('html').removeClass("dark");
    $('html').addClass("light");
  }

});

字符串
我的代码获取带有#mode id的复选框的状态,并将相应的类赋予/移除到:root。然后switch就像这样使用CSS:

:root,
:root.dark {
  --color-bg: #263238;
  --color-fg: #ffffff;
}
:root.light {
  --color-bg: #ffffff;
  --color-fg: #000000;
}


但是在my index page上,我有一个嵌入在html中的聊天框,所以我还写了这段代码,我可以将其应用于iframe中的聊天框页面:

$.get('https://amy-testfo.forumactif.com/', function(datas){ 
    var coche = $('#mode',datas);
    var mode = localStorage.getItem('mode');

    if(coche.not(':checked')){
      $('html').removeClass("light");
      $('html').addClass("dark");
    }
    if(coche.is(':checked')){
      $('html').removeClass("dark");
      $('html').addClass("light");
    }

    if (mode == 'dark') {
      $('html').removeClass("light");
      $('html').addClass("dark");
    }
    if (mode == 'light') {
      $('html').removeClass("dark");
      $('html').addClass("light");
    }

  });


但是当我选中复选框时,聊天框保持在黑暗模式,需要重新加载页面才能真正切换,所以这就是我的问题。我尝试在第二个脚本中使用.on('change'),但它没有做太多:(
提前感谢你,如果你决定帮助!

f0brbegy

f0brbegy1#

如果同时控制IFRAME和主页,则可以在IFRAME页面中创建一个函数,并从父级调用它。
例如,在你的IFRAME中有一个函数叫做:切换主题。在我的示例中,由于您有两个主题,因此与if语句相比,删除这两个类并添加一个类更容易。

function toggleTheme(theme){
   $("html").removeClass("dark light").addClass(theme);
}

字符串
然后给予你的iframe一个ID,如果它还没有。
<iframe ..... id="chatBox"></div>
然后在父函数中,你可以像这样调用这个函数:

const chatBox = document.querySelector("#chatBox");
chatBox.contentWindow.toggleTheme(theme);

**document.querySelector(“#chatBox”)**将引用iframe本身。
contentWindow将获取iframe的window对象。
toggleTheme是您在上面创建的函数

相关问题