安卓/Phonegap - onClick()不起作用

15

我正在使用 PhoneGap 并尝试检测 onClick 事件,但 Android 系统似乎完全忽略了它。以下是我正在尝试的代码:

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

我尝试了几种包括JavaScript、jQuery等的onClick变化,但是似乎没有一个有效。

我注意到onChange可以工作,但对我来说没有太大用处,因为我需要使用提示询问用户确认更改,如果不是则什么都不做。然而,使用onChange仍会更改下拉列表中的项目。

请问有人能帮忙解决这个问题吗?


你尝试过使用JavaScript附加而不是直接在HTML中写吗?这样更简洁,而且可能会有更好的支持。只需为选择器添加一个ID,然后 document.getElementById('foo').onclick = StartButtons; - GillesC
6个回答

11

我曾经遇到过与jQuery相关的问题,安卓系统好像无视JavaScript中的点击事件。最初,我的jQuery代码如下:

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

我不得不将其更改为:

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

不确定您是否在使用jQuery,但希望这可以帮助您。


如何在没有jQuery的情况下完成此操作? - JustWe

4
使用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>

不幸的是,这并没有起作用,安卓似乎完全忽略了这些调用。还有其他想法吗? - SingleWave Games
另外,我注意到onChange可以工作,但这对我没有太大用处,因为我需要使用提示来询问用户是否要更改,如果是“否”,则会忽略此操作(但使用onchange仍会更改下拉框中的项目)。谢谢。 - SingleWave Games

4

将此代码从index.html中删除:

https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *


编辑必须至少为6个字符;这篇文章还有什么需要改进的吗? - Oho SO. - fWd82

2

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,这解决了我一生的难题 =()


请详细了解如何使用标记语言来格式化你的回答。当前的回答格式非常混乱,难以阅读,很有可能会被用户 downvote。换句话说,你希望你的回答能够帮助到他人,而不仅是一堆看不懂的文字。 - GhostCat
抱歉,我是新手...我的错误,我会去了解一下。谢谢你的建议。 - Prometeo

1

注意,在Cordova 3.4中在输入框上绑定onclick事件不起作用。但是在div元素上可以正常工作。考虑到输入框元素是表单元素的一部分,就像选择元素一样,这可能是您的问题。


0
你尝试过将方法设置为“method”而不是“method();”吗?也许你可以尝试将你的代码改为:
<select name="func" onclick="StartButtons" data-native-menu="true">

希望你的方法会被调用。


我之前尝试过这个,但不幸的是它没有起作用,还有其他的想法吗?谢谢。 - SingleWave Games
3
'StartButtons'是一个指向函数的指针。'StartButtons()'将执行该函数。 - Omeriko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接