Javascript 单击未注册的事件

Javascript 单击未注册的事件,javascript,android,jquery,html,webkit,Javascript,Android,Jquery,Html,Webkit,这是Android应用程序的主屏幕。所有内容都在网络视图中呈现。 当我点击左下角的按钮时,此覆盖将打开,其内容将动态添加到其中。 当我点击其中一个图标时,它应该被添加到左侧的栏中。事实也是如此。 但是,当我点击另一个图标时,什么也没发生。它应该调用的函数没有运行(我在它的开头放了一个alert()) 当我关闭覆盖(左上角的按钮)并再次打开它(左下角)时,我可以添加另一个图标。但是,下一个事件将不会触发,直到覆盖层关闭并再次打开 我不知道解决这个问题有多容易,因为我不确定是否每个人都经历过这

这是Android应用程序的主屏幕。所有内容都在网络视图中呈现。

当我点击左下角的按钮时,此覆盖将打开,其内容将动态添加到其中。

当我点击其中一个图标时,它应该被添加到左侧的栏中。事实也是如此。

但是,当我点击另一个图标时,什么也没发生。它应该调用的函数没有运行(我在它的开头放了一个
alert()

当我关闭覆盖(左上角的按钮)并再次打开它(左下角)时,我可以添加另一个图标。但是,下一个事件将不会触发,直到覆盖层关闭并再次打开

我不知道解决这个问题有多容易,因为我不确定是否每个人都经历过这个问题。我(在运行安卓4.0.4的三星GT-P6200上)这样做了。其他人也向我抱怨过。然而,在SDK中包含的Android emulator中,Android 4.1和4.1似乎没有出现这种情况。这似乎是一个4.0版的问题

覆盖图中的图标如下所示<代码>
'+标签+'

如果有什么不同的话,我会使用jQuery来处理DOM

function launchApp (i)
{
    // Putting an alert () here indicates that the function doesn't get called, because no alert box appears on the screen //
    try
    {
        if (! launcherEdit)
        {
            android.launchAppFromList (i);
        }
        else
        {
            addAppToLauncherFromList (i); // This is what should happen //
        }
    }
    catch (ex)
    {
        handleException (ex);
    }
}
应用程序本身可以在这里找到
它的源代码可以在这里找到
这是Javascript文件


请,只是请,在没有正确理解实际问题的情况下,不要将此作为“完全重复”关闭,就像以前发生过很多次一样


这种血腥的混乱似乎只出现在Android 4.0.4及更低版本上(或在该版本号附近)。只有点击appLaunchers才会被完全忽略


我开始发现这里有某种联系。。。它总是在jQuery动画将项目添加到左侧栏后开始失败。这看起来像是一个可疑的重画问题


不确定这是否相关,但看到它出现在我的控制台上

02-12 14:30:22.650: E/dalvikvm(3936): JNI ERROR (app bug): attempt to use stale global reference 0xe
02-12 14:30:22.650: E/dalvikvm(3936): VM aborting
02-12 14:30:22.650: A/libc(3936): Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1)

如果您使用jQuery,最好使用“bind”事件来绑定您的单击事件

例如:

    <div class="appLauncher" data-id= ' + i + '">
<img src="data:image/png;base64,' + base64 + '" alt="[~]" /><br /><span>' + label + '</span></div>
试着让我知道它对你有没有帮助:)

我看了

您已经在脚本文件中设置了“var scrollable=Array()”。它应该是新数组()还是简单的[]


如果这与您的JNI错误(应用程序错误)有关,请尝试一下:尝试使用过时的全局引用0xe

不太像javascript用户,但我知道Android在“一次性”触发器和可重用触发器(PendingEvents)之间有明确的区别。有没有可能您正在以某种方式实例化.appLaunch的一次性行为?

我想您遇到了

在这种情况下,请尝试将调用添加到(未测试)


第二次(不工作)点击时有JavaScript错误吗?@AnthonyGrist-Nope,绝对没有。不过,我点击的项目周围确实有橙色的光晕。这说明我确实“点击”了它。你能在添加第一个图标后通过编程关闭并打开覆盖吗?现在它甚至不会触发第一次点击。我觉得我一直在调试Android的废话,而不是自己开发一些东西。没有帮助吗?这可能有用。但要使用委托事件,如:
$('WRAPPER SELECTOR').on('click','appLauncher',function(){…})。这种方法有几个优点,请参见。这会不会在创建Applauncher之前绑定事件,从而使它们无法工作?因为它们是在按下按钮时动态添加到DOM的。当webview DOM可以有动态元素时,使用.on绑定click事件。这没有什么区别。它仍然只获取第一个事件。如果某个元素是否附加了onclik,则可以进行调试。是否所有元素都有单击事件。我们怎么能证实呢?呃。。。我从没听说过这样的事。如何检查?能否将android.launchAppFromList和addAppToLauncherFromList触发的代码添加到问题中?。顺便提一下,addAppToLauncherFromList真的应该是android.addAppToLauncherFromList吗?(再一次,只是一个非js人士的想法)所有代码都可以在OK找到,我想我已经找到了代码,并且我更清楚应该发生什么。您是否检查了执行addAppToLauncherFromList后html的外观?如果该操作半破坏了html,则可能解释了问题。这看起来不像我第一次想到的问题。不幸的是,简单的解决方案似乎从来都不是有效的解决方案:感谢你指出这一点,但它并没有解决问题。
$(".appLauncher").bind("click",function(){
   var i=$(this)attr("data-id");
   launchApp(i);
});
$(".appLauncher").bind("click", function(e) {
   e.preventDefault();
   var i = $(this)attr("data-id");
   launchApp(i);
});