0

関数「Encaisser」では、「i」の値は for で問題ありませんが、関数内の関数で「i」を呼び出すと、「i」は「Undefined.

function Encaisser()
{

   for(var i=1; i <= Nombre_ligne_en_caisse; i++)
   {    
      db.transaction(function(t,i){ t.executeSql('SELECT En_cour FROM Sequence WHERE Nom="Ticket_ID"', [], function(tx,rs,i){ 

         var row = rs.rows.item(0); 
         var Tick_ID = row['En_Cour']; 
         var Noma = window['Produit_en_caisse_' + i]  ;

         alert(i); //Undefined
         alert(Noma); //Undefined

      }, [])});
   alert(i); //If i put the alert here, its OK
   }

}

なぜなのかご存知ですか?

ありがとうございました、

4

2 に答える 2

0

コールバックとコールバックiの両方の内部で再定義します。コールバック内では未定義でなければなりません。db.transactiont.executeSqlt.executeSqli

for ループからの値にアクセスする場合はi、コールバックでこれらのパラメーターの名前を変更する必要があります。

于 2013-11-07T18:37:03.563 に答える
0

問題は、内部関数が次の名前のパラメーターを定義していることiです。

db.transaction(function(t,i){ ...

i外部関数の値を使用する場合は、このパラメーターを削除することをお勧めします。db.transactionとにかく、実際にこのパラメーターの値を提供しているようには見えません。おそらく、次のようにi、各反復での値を別の変数で閉じて、関数内で使用することもできます。

var index = i;
db.transaction(function(t){ ...

     var Noma = window['Produit_en_caisse_' + index ];

     alert(index);
于 2013-11-07T18:36:46.300 に答える