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

私はあなたが望むものを正確に捉えることができません。

アプリの起動時に phonenumber チェックボックス リストを生成する場合は、 onSuccess() コールバックの最後で myFunction() を呼び出すだけです。

別の時間が必要な場合は、以下のように必要なイベント ハンドラーを定義する必要があります。

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

ループ中にコードでインデックス例外が発生する可能性があります。

以下で考えてみましょう。

  1. 各連絡先には 1 つの名前がありますが、1 つ以上の電話番号があります
  2. あなたのコードは、各名前をar1にプッシュし、連絡先の各電話番号もar2にプッシュします
  3. したがって、ar2.length は ar1.length よりも大きくなる可能性があります
  4. 生成する表示コードは、ループに ar2.length を使用します。連絡先に 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 に答える