我有两个事件监听器pagecontainerbeforeshow
和pagecontainershow
,但只有当代码部署到我的Android设备(Nexus 6P和旧版Nexus S)时才会触发。当我在Android模拟器(Nougat)中启动代码时,代码不会触发,并且没有错误消息。
MWE代码段:
$(':mobile-pagecontainer').on('pagecontainerbeforeshow', function(event, ui) {
console.log('I AM HERE');
});
$(':mobile-pagecontainer').on('pagecontainershow', function(event, ui) {
console.log('I AM HERE 2');
});
奇怪的是,我在项目的其他地方(但仍然从相同的DOM加载)中有其他相同的代码(用于其他模块化需求),这些代码可以正常启动。在内部,其他代码使用开关来区分特定页面(switch (ui.toPage.attr('id')) {
),除了事件触发回调的内容之外,它们是相同的。
我无法弄清楚为什么在部署到设备时一切正常,包括Nexus S等非常旧的设备,但在部署到模拟器时它没有。
它没有破裂。 <{1}}和pagecontainershow
根本无法触发。
这可能是原始页面显示事件正在消耗事件的行吗?
有什么想法吗?
注意:
答案 0 :(得分:1)
想出来 - 感谢deblocker。
tl; dr :在DOM ready事件之后添加事件侦听器 - 在我的情况下检查DOM ready和Cordova设备就绪。
Id
在我的情况下,我错误地解释了Cordova deviceready event,其中说&#34; 但是,只有在DOM加载&#34;时才会加载JavaScript。我读到这意味着听Id
事件隐含意味着DOM也准备就绪 - 事实并非如此。
将Jquery选择器更改为$(function() { // DOM Ready
document.addEventListener("deviceready", onDeviceReady, false);
});
// Cordova device ready
function onDeviceReady() {
$(':mobile-pagecontainer').on('pagecontainerbeforeshow', function(event, ui) {
// This now works correctly
}
}
:
deviceready
现在,所有事件都会在我的设备和Android模拟器中触发。
这是有效的,因为在其余DOM准备好之前文档可用。