【问题标题】:Android/ Phonegap - onClick() not workingAndroid/Phonegap - onClick() 不工作
【发布时间】:2012-05-03 16:11:55
【问题描述】:

我正在使用 phonegap 并试图检测 onClick,但是 Android 似乎完全忽略了它,下面是我正在尝试的:

<select name="func" onclick="StartButtons();" data-native-menu="true">

我尝试了几种 onClick 变体,包括 javascript、jQuery 等,但这些似乎都不起作用。

我注意到 onChange 有效,但这对我来说没有多大用处,因为我需要使用提示要求用户确认更改,如果不是,则什么也不做。但是,使用 onchange 仍然会更改下拉列表中的项目。

有人可以帮忙吗?

【问题讨论】:

  • 您是否尝试过通过 javascript 附加?它更干净,可能有更好的支持。只需在选择中添加一个 id,然后 document.getElementById('foo').onclick = StartButtons;

标签: javascript android html cordova


【解决方案1】:

我在使用 jQuery 时遇到了同样的问题,Android 似乎忽略了 javascript 中的点击事件。最初,我的 jQuery 代码如下所示:

$("#element").click(function () { alert("message"); });

我不得不把它改成:

$("#element").on("touchend", function () { alert("message"); });

不确定您是否在使用 jQuery,但希望这会有所帮助。

【讨论】:

  • 如何在没有 jquery 的情况下做到这一点?
【解决方案2】:

使用 javascript 将点击事件侦听器添加到您的对象。先给对象加一个id:

    <select id="obj_id" name="func" data-native-menu="true">

然后调用 addEventListener() :

    document.getElementById("obj_id").addEventListener("click", StartButtons, false);

Phonegap 文档建议在“deviceready”事件中运行所有 JavaScript 代码。所以你的代码应该是这样的:

main.js:

    function StartButtons() { ... }

    function onDeviceReady() {
        ...
        document.getElementById("obj_id")
            .addEventListener("click", StartButtons, false);
        ...
    }

    function init() {
        document.addEventListener("deviceready", onDeviceReady, false);
    }

index.html:

    ...
        <script type="text/javascript" charset="utf-8" src="main.js"></script>
    </head>
    <body onload="init();">
        ...
        <select id="obj_id" name="func" data-native-menu="true">
        ...
    </body>

【讨论】:

  • 不幸的是,这不起作用,Android 似乎完全忽略了这些调用。还有其他想法吗?
  • Alternativly,我注意到 onChange 有效,但这对我来说用处不大,因为我需要使用提示询问用户是否要更改,如果不是,则忽略(但是使用 onchange 仍然会更改 dopbox 中的项目)。谢谢
【解决方案3】:

https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline';媒体源 *">

从 index.html 中删除这段代码

【讨论】:

  • Edits must be at least 6 characters; Is there something else to improve in this post? - Oho SO.
【解决方案4】:

user1183085 的答案是正确的。 Android 不会像 Web 应用程序那样识别点击事件,这是有道理的,因为移动应用程序在原生时不是 Web 的,所以这就是为什么要制作 phonegap 但因为它可以与 jquery 一起使用,而不是直接与原生 java android 库一起使用。我这样写代码:

web 按钮或元素 onclick 处理所有 web 界面,特殊按钮或元素 ontouchend 处理移动界面。这是我的代码的一部分:

//this handles the login button events for the mobile touch of the user
$("button.login-button").on("touchend", function () {alert('hello touch ! =o' )});

//this handles the login button events for web clicks
$("button.login-button").on("click", function () {alert('hello click ! =o' )});

感谢用户 user1183085,它永远解决了我的生活 =()

【讨论】:

  • 请阅读如何使用标记来格式化您的答案。就像现在一样,它非常接近值得反对,因为它很难阅读。换句话说:你希望你的答案是有用的,而不仅仅是一堆乱七八糟的文字。
  • 对不起,我是新来的……我的错误,我会读到它。感谢您的建议
【解决方案5】:

注意,在 Cordova 3.4 中对输入绑定 onclick 不起作用。但它适用于 div 元素。考虑到输入元素是表单元素的一部分,就像选择元素一样,这可能是您的问题。

【讨论】:

    【解决方案6】:

    您是否尝试过将您的方法设置为“method”而不是“method();”?所以也许你可以试试你的线路:

    <select name="func" onclick="StartButtons" data-native-menu="true">
    

    那么希望你的方法会被调用。

    【讨论】:

    • 我以前试过这个,不幸的是它没有用,还有其他想法吗?谢谢
    • 'StartButtons' 是一个指向函数的指针。 'StartButtons()' 将执行该函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 2013-02-15
    相关资源
    最近更新 更多