JNM
JNM

Reputation: 1195

Phonegap (Cordova) iOS button click

I am trying to create a very simple phone gap application for iOS. I am using query mobile. the problem is, that i can't get javascript event to fire on button click.
Code i have now:

<!DOCTYPE html>
<html>
<head>
    <title>Title</title>
    <meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1">
    <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="js/jquery.mobile-1.2.0.css" />
    <script type="text/javascript" charset="utf-8" src="cordova-1.8.1.js"></script>
    <script type="text/javascript" charset="utf-8" src="js/jquery-1.8.2.min.js"></script>
    <script type="text/javascript" charset="utf-8" src="js/jquery.mobile-1.2.0.min.js"></script>
    <script type="text/javascript">
        document.addEventListener("deviceready", onDeviceReady, false);

        function onDeviceReady() {
        }

        function showAlert() {
            navigator.notification.alert("Cordova is working");
        }

    </script>
</head>
<body>
    <div data-role="page" id="options" data-add-back-btn="true" data-back-btn-text="Atgal">
        <div data-role="header" data-position="fixed">
            <h1>Title</h1>
        </div>
        <div data-role="content">
            <h1>Alert</h1>
            <p><a href="#" onclick="showAlert(); return false;" data-role="button">Show alert</a></p>
        </div>
    </div>
</body>
</html>

I tried multiple solutions to fix my problem, but none of them works. When have button with # in href, it doesn't event change the color on click. When i add url, it changes color. But it never call javascript function. Another problem is, that document.addEventListener("deviceready", onDeviceReady, false); works only in the index page. If i press button in initial page which redirects to another page, OnDeviceReady function is never called.
Anybody has any ideas?

Upvotes: 0

Views: 8451

Answers (5)

Post Impatica
Post Impatica

Reputation: 16393

Even though i had z-index set higher for the md-button it still wouldn't click on iOS. It clicked fine on Android. I had to set a parent container in my case the <md-subheader> to z-index: -1; then it worked.

Upvotes: 0

user1638126
user1638126

Reputation: 79

In the body tag you need to add tag and the onBodyLoad() function in the javascript should be like:

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

Upvotes: 2

JNM
JNM

Reputation: 1195

I am a total noob with phone gap and query mobile, so i made a stupid mistake. Problem is, that it loads not whole page, when i click on button, but only body part. This means, that it uses only javascript which is in the first page. And that was my problem. Now i have putted all javascript into separate file (all javascript for both files) and it works.

Upvotes: 1

Littm
Littm

Reputation: 4947

Try the following with jQuery:

<!DOCTYPE html>
<html>
<head>
    <title>Title</title>
    <meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1">
    <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="js/jquery.mobile-1.2.0.css" />
    <script type="text/javascript" charset="utf-8" src="cordova-1.8.1.js"></script>
    <script type="text/javascript" charset="utf-8" src="js/jquery-1.8.2.min.js"></script>
    <script type="text/javascript" charset="utf-8" src="js/jquery.mobile-1.2.0.min.js"></script>
    <script type="text/javascript">
        document.addEventListener("deviceready", onDeviceReady, false);

        function onDeviceReady() {
        }

        function showAlert() {
            navigator.notification.alert("Cordova is working");
        }

        $(function() {
            $("#my_link").click(function() {
                showAlert();
            });
        });

    </script>
</head>
<body>
    <div data-role="page" id="options" data-add-back-btn="true" data-back-btn-text="Atgal">
        <div data-role="header" data-position="fixed">
            <h1>Title</h1>
        </div>
        <div data-role="content">
            <h1>Alert</h1>
            <p><a id="my_link" href="#" data-role="button">Show alert</a></p>
        </div>
    </div>
</body>
</html>

Hope this helps. Let me know about your results.

Upvotes: 0

Marcus
Marcus

Reputation: 5447

onDeviceReady() is only called once (when the device (ie Cordova) is ready). You'll want $(document).on('pageinit', '#pageid', function() { }); for something to fire every time the page is navigated to.

Upvotes: 2

Related Questions