0

我在使用 Android 4.0.3+JQM+Phonegap 时没有遇到任何问题。昨天我在Android 4.1上测试,发现那些动态生成的ListView有时会给我重复的结果。例如,我使用以下代码生成一个 ListView 来显示今天的日期:

<ul data-role="listview" data-inset="true" data-theme="c" 
data-divider-theme="d" id="todayvalue">             
</ul>


document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {
var today = new Date();
var dayofmonth = today.getDate();
var dayofweek = today.getDay();
var year = today.getFullYear();
var month = today.getMonth();
var myDays=      ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"];
var m_names = ["January", "February", "March", 
    "April", "May", "June", "July", "August", "September", 
    "October", "November", "December"];
$('#todayvalue').append('<li>Today is '+ myDays[dayofweek]+ ', '+year+'-'+m_names[month]+'-'+dayofmonth+'</li>');
$('#todayvalue').listview('refresh');


 }

它以前完全没有问题。但现在它会生成两个相同的行。

怪谁?

更新:我已将项目上传到https://github.com/ysongfinance/520Toll

经过进一步调试,我发现onDeviceReady() 被调用了两次,但其中一个看起来很奇怪:

07-05 20:42:31.368:I/Web 控制台(825):########in OndeviceReady at file:///android_asset/www/js/updatetoll.js:4 07-05 20:42 :31.488:I/Web 控制台(825):########in OndeviceReady at null :4

看看第二个调用“在 OndeviceReady 中为 null”,那个“null”是什么意思?

4

1 回答 1

1

我用 Cordova 1.9 和 Android 2.2 尝试了你的例子,它触发deviceready了两次。

然后我将updatetoll.js包含在身体中的东西移到头部,它只发射一次。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>520 Toll Rate</title>
        <link rel="stylesheet" href="css/jquery.mobile-1.0.1.min.css" /> 

        <script src="js/jquery-1.6.4.min.js"></script> 
        <script src="js/jquery.mobile-1.0.1.min.js"></script>

        <script type="text/javascript" charset="utf-8" src="js/cordova-1.9.0.js"></script>
        <script src="js/updatetoll.js"></script>        
    </head>
    <body>      
        <div data-role="header">                
                <img src="logo/ic520toll.png" width=50px height=50px style="margin-left: 40%;"">            
        </div>
        <div data-role="content">
        <ul data-role="listview" data-inset="true" data-theme="c" 
            data-divider-theme="d" id="todayvalue">             
        </ul>           

        </div>  

    </body>
</html>

您能否检查此更改并查看它在您的设备中是否有效。

编辑

如果将侦听器放在head标签之外,jQuery Mobile 似乎会产生问题。我尝试了较新版本的 jQuery Mobile (1.1.0),但效果仍然相同。

如果您删除 jQuery Mobile 并保持您的代码不变,那么它只会触发一次。

于 2012-07-07T05:19:54.487 回答