Jquery Mobile pagecontainershow事件未在模拟器中触发,但在设备上?

时间:2017-06-29 10:09:44

标签: javascript jquery-mobile android-emulator jquery-events

我有两个事件监听器pagecontainerbeforeshowpagecontainershow,但只有当代码部署到我的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根本无法触发。

这可能是原始页面显示事件正在消耗事件的行吗?

有什么想法吗?

注意:

  • Jquery手机版:jquery.mobile-1.5.0-alpha.1.min.js

1 个答案:

答案 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准备好之前文档可用。