0

当我必须打开此页面时,我想在不点击任何按钮的情况下显示手机中的所有联系人。这里 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>
4

1 回答 1

0

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

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

如果你想要另一个时间,你应该定义一个你想要的事件处理程序,如下所示。

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

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

下面我们来思考一下。

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

固定代码

        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");
                }
            } 
        }
于 2013-02-14T06:28:23.920 回答