除非您离开应用程序并返回,否则按钮 onclick 事件在 iOS 中不起作用,然后它就起作用了

Posted

技术标签:

【中文标题】除非您离开应用程序并返回,否则按钮 onclick 事件在 iOS 中不起作用,然后它就起作用了【英文标题】:Button onclick event not working in iOS unless you go away from app and back, then it works 【发布时间】:2018-07-19 17:02:40 【问题描述】:

用新信息改变问题

之前我问过以下问题。但更多细节表明,如果您通过取消选择应用程序(可能不是正确的术语)然后选择应用程序来切换到不同的应用程序,则该按钮有效。如果您关闭应用程序并重新启动,它就不会再次运行。很奇怪。我在本段下方发布了完整的页面代码,下面的所有内容都是旧问题和 ------ 行下的部分代码

    <!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="format-detection" content="telephone=no" /> <meta name="msapplication-tap-highlight" content="no" /><meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width" />
        <meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline'; style-src 'self' 'unsafe-inline'; media-src *" />

    <!--<link rel="stylesheet" type="text/css" href="css/fontawesome-all.css" />-->

        <script defer src="js/fontawesome-all.js"></script>
        <script src="framwork7/framwork7.js"></script>
        <script type="text/javascript" src="cordova.js"></script><script src="js/jquery-3.3.1.js"></script>
        <script src="js/bootstrap.js" ></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/poppe.min.js"></script>
        <script type="text/javascript" src="js/news-feed.js"></script>
        <script type="text/javascript" src="js/index.js"></script>

        <link rel="stylesheet" type="text/css" href="css/bootstrap.css" />
        <link rel="stylesheet" type="text/css" href="css/index.css" />
        <script>
            var xmlhttp;
            var url;

/* window.onload = function()
      
          document.addEventListener("deviceready", init);
      
      */
            document.addEventListener("deviceready", init, false)

            function init()
                document.getElementById('Submit').addEventListener('click', getData);
            


            function getData()
                url = "http://www.example.org/myapp.php";
                url += "?cemetery=" + document.getElementById('cemetery').value;
                url += "&lastname=" + document.getElementById('lastname').value;
                url += "&firstname=" + document.getElementById('firstname').value;

                $.ajax(
                    type: 'get',
                    url: url,
                    success: function(data)
                        document.getElementById('laloinfo').innerHTML = "";
                        document.getElementById('laloinfo').innerHTML = "<strong>Scroll down for results</strong>"; 
                        /* document.getElementById('lalo2').innerHTML = data; */
                        $("#lalo2").html(data);
                    
                );
            
        </script>
        <title>Catholic Cemeteries Mobile App</title>
    </head>


    <body>
<nav class="navbar navbar-expand-md navbar-dark bg-primary mb-3">
  <div class="container">
    <a class="navbar-brand" href="#">Catholic Cemeteries</a>
    <button class="navbar-toggler" data-toggle="collapse" data-target="#navbarNav"><span class="navbar-toggler-icon"> ↓  </span></button>
    <div class="collapse navbar-collapse" id="navbarNav">
      <ul class="navbar-nav">
        <li class="nav-item">
          <a class="nav-link" href="index.html"><i class="fas fa-home"></i> Home</a>
        </li>
        <li class="nav-item">
          <a class="nav-link active" href="lalo.html"><i class="fas fa-heart"></i> Locate a Loved One</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="#" onclick="window.open('http://www.example.org','_system');"><i class="fas fa-cloud"></i> Website</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="locations.html"><i class="fas fa-phone"></i> Locations & Contact</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="#" onclick="window.open('https://facebook.com/myfacebook','_system');"><i class="fab fa-facebook"></i> Facebook</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" data-toggle="modal" data-target="#aboutModal" href="#aboutModal"><i class="fas fa-question"></i> About Version</a>
        </li>
      </ul>
    </div>
  </div>
</nav>

    <div class="container text-center">
      <h1>myname</h1>
      <p class="lead">Welcome to the my name Mobile App</p>

  <div class="row">

    <!-- LALO -->
    <div class="card bg-light" id="lalo">

        <div class="card-header"><h3><i class="far fa-heart"></i> Locate a Loved One</h3></div>

        <div class="card-body">
        <div class="text-justify">Catholic Cemeteries is proud to announce our new <strong>Locate a Loved One</strong> search engine. Enter your loved one's name to get location information such as crypts / niches, section, row, and grave number.</div>
    <br>
        <div class="text-justify"><strong>You must choose a cemetery and at least a partial last name to search the database.</strong></div>
    <br>
        <div class="text-justify bg-info"><i>Please Note: Please allow approximately one week for current activity to appear in this search engine. If you can not find your loved one, please call the appropriate cemetery for assistance.</i></div>
        <br>

                <div class="form-group text-left">
                    <label for="cemetery">Cemetery: Required</label>
                    <select id="cemetery" class="form-control-sm">
                        <option value="1">J Cemetery, Middle Village</option>
                        <option value="3">C Cemetery, Farmingdale</option>
                        <option value="4">M Cemetery, Flushing</option>
                        <option value="2">H Cemetery, ***lyn</option>
                    </select>
                </div>
                <div class="form-group text-left">
                    <label for="lastname">Last Name: Required - Parital OK</label>
                    <input type="text" maxlength="50" id="lastname" class="form-control form-control-sm" placeholder="Enter Last name">
                </div>
                <div class="form-group text-left">
                    <label for="firstname">First Name: </label>
                    <input type="text" maxlength="30" id="firstname" class="form-control form-control-sm" placeholder="Enter First name">
                </div>
<input type="hidden" name="timecounter" value="Submit">
            <br><button class="btn btn-primary" name="Submit" value="Search" id="Submit">~SEARCH~</button><br/>         
        </div>
</div>
    <!-- LALO -->
  </div>
</div>
<!-- MODAL -->
   <div class="modal" id="aboutModal">
     <div class="modal-dialog">
       <div class="modal-content">
         <div class="modal-header">
           <h5 class="modal-title">My Name Mobile App</h5>
           <button class="close" data-dismiss="modal">&times;</button>
         </div>
         <div class="modal-body">
           Mobile App version 2.0.9<br/>
           <br/>
           If you are having an issue with this app, please contact me and give them the version number above.
         </div>
           <hr/>
         <div class="modal-footer">
           <button class="btn btn-primary" data-dismiss="modal">Close</button>
         </div>
       </div>
     </div>
   </div>
<footer><p class="text-center">copyright &copy; 2018, me</p></footer>




</body>
</html>

------------------下面的老问题--------------- ---------------

我已经尝试了 10 种解决方案,但都没有奏效。我有一个不能只是提交的表单,因为它接收回数据然后放入一个 div。此代码适用于 android,但不适用于 ios。 (这是一个使用 framework7 和引导程序的 HTML 5 应用程序,然后使用 phonegap 构建)。它是一个搜索表单,它提交到服务器 php 页面并将结果取回并将它们放入 div 中。当你点击按钮时,iOS 什么都不做。

这里是按钮代码:

<button class="btn btn-primary" name="Submit" value="Search" id="Submit">~SEARCH~</button>

这是处理程序代码:

  <script>
  var xmlhttp;
  var url;

  window.onload = function()
  
      document.addEventListener("deviceready", init, false);
  

  function init()
  


    document.getElementById('Submit').addEventListener('click', getData, false );
  

  function getData()

    url = "http://www.mywebsite.org/myapp.php";
      url += "?cemetery=" + document.getElementById('cemetery').value;
      url += "&lastname=" + document.getElementById('lastname').value;
      url += "&firstname=" + document.getElementById('firstname').value;

    $.ajax(
        type: 'get',
        url: url,
        success: function(data)
            document.getElementById('laloinfo').innerHTML = "";
            document.getElementById('laloinfo').innerHTML = "<strong>Scroll down for results</strong>";
            /* document.getElementById('lalo2').innerHTML = data; */
            $("#lalo2").html(data);

        
    );


提前感谢您的帮助。这让我发疯了,已经折磨了一周。

约翰

【问题讨论】:

您在 Safari 控制台中看到错误吗?您可以在 Mac 上使用 Safari 并调试在设备或模拟器上运行的 Javascript。 嗨,大卫,感谢您的意见。它实际上在 mac/safari 上运行良好,使用网络上的 phonegap 服务器进行测试。但它不是设备/模拟器。不知道该怎么做。 【参考方案1】:
     var xmlhttp;
      var url;

      $(document).ready(function()
           $('#Submit').on('click', getData);
      ); 


      function getData()

        url = "http://www.mywebsite.org/myapp.php";
          url += "?cemetery=" + $('#cemetery').val();
          url += "&lastname=" + $('#lastname').val();
          url += "&firstname=" + $('#firstname').val();

        $.ajax(
            type: 'get',
            url: url,
            success: function(data)
               $('#laloinfo').html= "";
                $('#laloinfo').html= "<strong>Scroll down for results</strong>";
                /* $('#lalo2').html= data; */
                $("#lalo2").html(data);

            
        );

【讨论】:

嗨,Amine,我刚刚在 safari 中尝试过,但它不起作用。旧代码在 safari 中有效,但在 iphone 上无效,但您的代码甚至在 safari 中无效。除非我输入了错误的东西,我会检查但我不这么认为。 将 jquery.js 添加到您的页面,它将工作并从浏览器激活脚本,它可能会被停用 jquery 已加载,不知道从浏览器激活脚本是什么意思。 1- 单击“Safari”菜单,选择“首选项” 2- 单击“安全”选项卡 3- 单击“启用 JavaScript”复选框以启用或禁用 JavaScript 4- 关闭“首选项” " 窗口 5- JavaScript 现已启用【参考方案2】:

这是一个演示如何直接调试 iOS WebView 的视频。

https://youtu.be/gZUj4KfFpQ4

这应该可以很容易地看出你哪里出错了。

在 Xcode 中创建和打开 Cordova 应用程序以进行调试:

[ ~] cordova create TestApp com.mydomain.testapp "TestApp"
Creating a new cordova project.
[ ~] cd TestApp/
[ ~/TestApp] cordova platform add ios --save
Using cordova-fetch for cordova-ios@~4.5.4
Adding ios project...
Creating Cordova project for the iOS platform:
    Path: platforms/ios
    Package: com.mydomain.testapp
    Name: TestApp
iOS project created with cordova-ios@4.5.4
Discovered plugin "cordova-plugin-whitelist" in config.xml. Adding it to the project
Installing "cordova-plugin-whitelist" for ios
Adding cordova-plugin-whitelist to package.json
Saved plugin info for "cordova-plugin-whitelist" to config.xml
--save flag or autosave detected
Saving ios@~4.5.4 into config.xml file ...

[ ~/TestApp] open platforms/ios/TestApp.xcworkspace
[ ~/TestApp]

此时在 Xcode 中只需选择您的模拟器并单击运行三角形:

步骤如下:

    在 Mac 上的 Safari 中,转到 Preferences... -> Advanced 并启用 Show Develop menu in the menu bar 确保应用程序正在模拟器上运行 在 Safari 中选择 Develop -> Simulator -- iPhone (model) -> 选择 WebView -- 请注意,当您将鼠标悬停在菜单上时,WebView 会突出显示 开始 Javascript 调试

【讨论】:

这变得更奇怪了。所以我使用phonegap服务器从ma测试safari,然后从模拟器中的safari(我不知道如何将实际的应用程序放入模拟器),它工作正常。然后我让某人在 testflight 中再次在他们的 iphone 上测试它,没有工作,然后突然它工作了,然后停止工作。我想知道是不是页面没有完成加载。似乎是,但也许不是。因此,window.onload 上的侦听器可能无法正常运行。 更新了有关在 Xcode 中调试 Cordova/Phonegap 应用程序的详细信息。只有这样才能找到问题。 再次谢谢你,我明天进去看看这个。不过还有一个线索。我刚从我的测试人员那里得知,当你进入应用程序时,它不起作用。如果您关闭应用程序并重新进入,它将不起作用。但是,如果您离开应用程序(它在技术上仍在运行,但将焦点从应用程序转移)然后转到正在运行的应用程序,选择该应用程序,然后它就可以工作了。因此,让应用散焦,然后聚焦应用使其工作。 它在模拟器中工作,所以没有显示问题。但是在手机上,当您进入页面并点击搜索时,什么也没有发生,但如果您保持应用程序运行并转到另一个应用程序,然后返回,搜索工作。

以上是关于除非您离开应用程序并返回,否则按钮 onclick 事件在 iOS 中不起作用,然后它就起作用了的主要内容,如果未能解决你的问题,请参考以下文章

除非用户单击特定按钮,否则如何向用户显示警报框

除非之前按下,否则按下运行按钮不会提高速度

除非 PR 有“Ready For Merge”标签,否则不要启用绿色合并按钮

离开活动并返回时保持设置按钮颜色

除非主窗口未聚焦,否则不会更新 QLabel

除非主窗口未聚焦,否则不会更新 QLabel