在Phonegap中显示联系人

时间:2013-02-14 06:07:19

标签: javascript android cordova

当我必须打开此页面时,我想显示手机中的所有联系人,而不是点击任何按钮。     这里myFunction()显示所有联系人。

    I have to call `myFunction()`, in this code. I dont know where to call this function. Help me

            var ar1 = new Array;
            var ar2 = new Array;
            var name, number;
            var counter = 1;

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

            function onDeviceReady() {
                var options = new ContactFindOptions();
                options.filter = "";
                options.multiple = true;
                filter = [ "displayName", "phoneNumbers" ];
                navigator.contacts.find(filter, onSuccess, onError, options);               
            }

            function onSuccess(contacts) {
                 for ( var i = 0; i < contacts.length; i++) {
                    for ( var j = 0; j < contacts[i].phoneNumbers.length; j++) {
                        name = contacts[i].displayName;
                        number = contacts[i].phoneNumbers[j].value;
                        ar1.push(name);
                        ar2.push(number);  

// here i called myFunction(), but it's displaying one contact in multiple times                    
                         }
                    // here i called myFunction(), but it's displaying one contact in multiple times 
                    }
// Here i called myFunction(), the function is not calling
            }

            function onError(contactError) {
                alert('onError!');
            }

    //  where to call this function 
            function myFunction() {

                 $("#checkall").click(function() {
                    if ($(this).is(':checked')) {
                        $(":checkbox").attr("checked", true);
                    } else {

                        $(":checkbox").attr("checked", false);
                    }
                }); 

                 for ( var i = 0; i < ar2.length; i++) {

                    var newTextBoxDiv = $(document.createElement('div')).attr("id",
                            'TextBoxDiv' + counter);
                    newTextBoxDiv.after().html(
                            '<input type="checkbox" value="'
                                    + ar1[i] + '"/>'
                                    + ar1[i] + "   " + "   " + ar2[i] + '</br>');
                    newTextBoxDiv.appendTo("#TextBoxesGroup");

                } 
            }
            </script>
        </head>
        <body>

            </br>

        <div id="TextBoxesGroup">
                <div id="TextBoxDiv1">
                    <input type="checkbox" id="checkall" value="check" />selectAll</br> <br />
                    <br /> <br />
                </div>
            </div>

            </body>

        </html>

1 个答案:

答案 0 :(得分:0)

我无法抓住你想要的东西。

如果您想在应用启动时生成phonenumber复选框列表, 只需在onSuccess()回调结束时调用myFunction()。

如果你想要另一次,你应该在下面定义一个你想要的事件处理程序。

$("#PhonenumberListButton" ).click( function() { myFunction(); } );

并且您的代码可能在循环期间发生索引异常。

让我们考虑一下。

  1. 每个联系人都有1个姓名但有1个或多个电话号码
  2. 您的代码将每个名称推送到ar1,并将每个联系人的电话号码推送到ar2
  3. 所以ar2.length可以大于ar1.length
  4. 您的生成显示代码使用ar2.length进行循环。如果任何联系人有2个或更多的话,它应该例外。 这是在onSuccess()中停止循环的原因。
  5. 固定代码

            function onSuccess(contacts) {
                 for ( var i = 0; i < contacts.length; i++) {
                    name = contacts[i].displayName;
                    ar1.push(name);
    
                    ar2[i] = []; // array for multiple phone#.
                    for ( var j = 0; j < contacts[i].phoneNumbers.length; j++) {
                        number = contacts[i].phoneNumbers[j].value;
                        ar2[i].push(number);
                    }
                 }
    
                 myFunction(); // display phone numbers
            }
    
            function myFunction() {
    
                 $("#checkall").click(function() {
                    if ($(this).is(':checked')) {
                        $(":checkbox").attr("checked", true);
                    } else {
    
                        $(":checkbox").attr("checked", false);
                    }
                }); 
    
                 for ( var i = 0; i < ar2.length; i++) {
                    if ( ar2[i].length ) {  // avoid none phone# exception
                        var newTextBoxDiv = $(document.createElement('div')).attr("id",
                                'TextBoxDiv' + counter);
                        newTextBoxDiv.after().html(
                                '<input type="checkbox" value="'
                                        + ar1[i] + '"/>'
                                        + ar1[i] + "   " + "   " + ar2[i][0] + '</br>');
                        newTextBoxDiv.appendTo("#TextBoxesGroup");
                    }
                } 
            }