Onsen 2.0-使用Javascript向Ons开关添加事件侦听器

Onsen 2.0-使用Javascript向Ons开关添加事件侦听器,javascript,onsen-ui,monaca,Javascript,Onsen Ui,Monaca,我担心我错过了一些非常简单的东西,但我已经尝试了多次尝试,出现了各种错误。关于守则: <script> document.getElementById("optStats").on("change", function(e) { alert("Switch changed!"); }); </script> <ons-switch modifier="list-item" id="optStats"></ons-swi

我担心我错过了一些非常简单的东西,但我已经尝试了多次尝试,出现了各种错误。关于守则:

<script>
        document.getElementById("optStats").on("change", function(e) {
    alert("Switch changed!");
  });
    </script>
<ons-switch modifier="list-item" id="optStats"></ons-switch>
我在ons.ready()中使用了它,并在外部尝试了它,这导致了相同的错误,
无法读取addEventListener的属性,如上所述

document.getElementById('optStats').addEventListener('change', function(e) {
      console.log('click', e.target.checked);
    });
上次更新我发誓: 最后谢谢你,弗兰·迪奥斯

在处理完这个之后,init不是您想要使用的事件,您肯定想要使用show来完成我想要做的事情

document.addEventListener("show", function(event){
    if (event.target.id == "pgOptions") { 
        document.getElementById('optStats').addEventListener('change', function(e) {
            localStorage.setItem('useDetailedStats', e.target.checked); 
            useDetailedStats = e.target.checked;
        });
        document.getElementById('optStats').setChecked(useDetailedStats);
      } 
},false);

无论出于何种原因,在
上使用init时,只要按下该选项卡,就会导致开关改变状态。通过使用show,它不会。此外,当我记录init操作时,尽管页面在应用程序启动时没有显示,但仍然被记录为init两次。“秀”不会导致这种情况。不管怎样,@fran dios提供的代码都是获得我所需内容的正确基础,他的答案仍然正确,我只需要使用另一个事件。

恐怕你是对的。也许您想要使用的是JS而不是jQuery。其余的应该是正确的

更新:

超级简单的例子:


我放置了
document.getElementById(“optStats”).addEventListener(“change”,function(){alert('t');}),以确保加载了DOM,并导致类似的错误,但addEventListener的
无法读取属性除外。那么,如果这不起作用,你认为保存设置开关的最佳方法是什么,屏幕的加载/退出(推/弹出)?@Munsterlander I添加了一个例子。确保您正在查找具有
getElementById
的内容。可能你的交换机没有连接到DOM吗?我检查并确认了。奇怪的是,我将我的代码复制到了你的示例中,它可以工作,但在我的应用程序中却不行。我在我的应用程序中遇到与上面列出的相同的错误。我被难住了。它在模板中不起作用吗?如果你以前没有推送模板的内容,它就不起作用了。模板类似于不同的html文件,它们的内容没有附加到DOM,因此使用
getElementById
无法找到它。
document.addEventListener("show", function(event){
    if (event.target.id == "pgOptions") { 
        document.getElementById('optStats').addEventListener('change', function(e) {
            localStorage.setItem('useDetailedStats', e.target.checked); 
            useDetailedStats = e.target.checked;
        });
        document.getElementById('optStats').setChecked(useDetailedStats);
      } 
},false);
<ons-page>
  <ons-switch id="mySwitch"></ons-switch>
</ons-page>
-----
document.getElementById('my-switch').addEventListener('change', function(e) {
  console.log('click', e);
});
document.addEventListener("init", function(event) {
  if (event.target.id == "my-page") {
    document.getElementById("my-switch").addEventListener('change', function(e) {
      console.log('click', e);
    });
  }
}, false);