Onsen 2.0 - 使用 Javascript 向 Ons-Switch 添加事件侦听器
Onsen 2.0 - Adding event listener to Ons-Switch with Javascript
我担心我遗漏了一些非常简单的东西,但我尝试了多次尝试并出现了各种错误。关于代码:
<script>
document.getElementById("optStats").on("change", function(e) {
alert("Switch changed!");
});
</script>
<ons-switch modifier="list-item" id="optStats"></ons-switch>
所以上面的方法是行不通的。它会生成 Uncaught TypeError: Cannot read property of on of null
的错误。所以我假设我需要将函数添加到 onload init 函数,但它仍然失败并出现相同的错误。
我已经尝试了此处列出的所有选项:https://onsen.io/guide/overview.html#EventHandling 但没有成功。这将包括使用 var 而不是 id 以及我认为可行的任何其他列出的内容。
编辑:完整代码无效,但在没有模板标签的情况下可以在 codepen 中使用。
<ons-template id="options.html" >
<ons-page>
<ons-toolbar>
<div class="center">Options</div>
</ons-toolbar>
<ons-list modifier="inset" style="margin-top:10px;">
<ons-list-item>
Detailed Stats
<ons-switch modifier="list-item" id="optStats"></ons-switch>
</ons-list-item>
</ons-list>
</ons-page>
</ons-template>
我在 ons.ready() 中使用它,并在外面尝试过,结果出现相同的错误,cannot read property of addEventListener
,如上所列。
document.getElementById('optStats').addEventListener('change', function(e) {
console.log('click', e.target.checked);
});
最后更新我发誓:
最后!!!!谢谢@Fran-dios!
处理完这个之后,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);
无论出于何种原因,在 <ons-tabbar>
上使用 init 时,无论何时按下选项卡,都会导致开关改变状态。通过使用 show,它不会。此外,当我记录 init 操作时,该页面即使未在应用程序启动时显示,仍被记录为两次 init 。显示不会导致此。无论哪种方式,@fran-dios 提供的代码都是获得我需要的东西的正确基础,他的回答仍然是正确的,我只需要使用不同的事件。
恐怕你是对的。也许你想用的是JS'addEventListener rather than jQuery's on。其余的应该是正确的。
更新:
超级简单的例子:http://codepen.io/frankdiox/pen/WrKjew
<ons-page>
<ons-switch id="mySwitch"></ons-switch>
</ons-page>
-----
document.getElementById('my-switch').addEventListener('change', function(e) {
console.log('click', e);
});
更新二:
真正的问题是关于在 Onsen 中初始化页面 UI 2. 最好的方法是使用 page life cycle 事件,特别是 init
事件。
document.addEventListener("init", function(event) {
if (event.target.id == "my-page") {
document.getElementById("my-switch").addEventListener('change', function(e) {
console.log('click', e);
});
}
}, false);
我担心我遗漏了一些非常简单的东西,但我尝试了多次尝试并出现了各种错误。关于代码:
<script>
document.getElementById("optStats").on("change", function(e) {
alert("Switch changed!");
});
</script>
<ons-switch modifier="list-item" id="optStats"></ons-switch>
所以上面的方法是行不通的。它会生成 Uncaught TypeError: Cannot read property of on of null
的错误。所以我假设我需要将函数添加到 onload init 函数,但它仍然失败并出现相同的错误。
我已经尝试了此处列出的所有选项:https://onsen.io/guide/overview.html#EventHandling 但没有成功。这将包括使用 var 而不是 id 以及我认为可行的任何其他列出的内容。
编辑:完整代码无效,但在没有模板标签的情况下可以在 codepen 中使用。
<ons-template id="options.html" >
<ons-page>
<ons-toolbar>
<div class="center">Options</div>
</ons-toolbar>
<ons-list modifier="inset" style="margin-top:10px;">
<ons-list-item>
Detailed Stats
<ons-switch modifier="list-item" id="optStats"></ons-switch>
</ons-list-item>
</ons-list>
</ons-page>
</ons-template>
我在 ons.ready() 中使用它,并在外面尝试过,结果出现相同的错误,cannot read property of addEventListener
,如上所列。
document.getElementById('optStats').addEventListener('change', function(e) {
console.log('click', e.target.checked);
});
最后更新我发誓: 最后!!!!谢谢@Fran-dios!
处理完这个之后,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);
无论出于何种原因,在 <ons-tabbar>
上使用 init 时,无论何时按下选项卡,都会导致开关改变状态。通过使用 show,它不会。此外,当我记录 init 操作时,该页面即使未在应用程序启动时显示,仍被记录为两次 init 。显示不会导致此。无论哪种方式,@fran-dios 提供的代码都是获得我需要的东西的正确基础,他的回答仍然是正确的,我只需要使用不同的事件。
恐怕你是对的。也许你想用的是JS'addEventListener rather than jQuery's on。其余的应该是正确的。
更新:
超级简单的例子:http://codepen.io/frankdiox/pen/WrKjew
<ons-page>
<ons-switch id="mySwitch"></ons-switch>
</ons-page>
-----
document.getElementById('my-switch').addEventListener('change', function(e) {
console.log('click', e);
});
更新二:
真正的问题是关于在 Onsen 中初始化页面 UI 2. 最好的方法是使用 page life cycle 事件,特别是 init
事件。
document.addEventListener("init", function(event) {
if (event.target.id == "my-page") {
document.getElementById("my-switch").addEventListener('change', function(e) {
console.log('click', e);
});
}
}, false);