2016-03-28 10 views
0

関連するイベントとともにディナムにドロップダウンオブジェクトを作成するページがあります。forループ内のonchangeイベントのトリガは一度だけ実行されます

onchangeイベントは、ユーザーが実行したときにすべてのオブジェクトに有効です。 私の問題は、プログラムで "onchange"を呼び出すときです。 1回だけ実行されます。私は、データベースからドロップダウン値を結合していますので、

for (i = 0; i < me.datasource.DocLines.length; i++) { 
    data = me.datasource.DocLines[i]; 
    x = $('#subproduct_' + data.Code); 
    x.val(data.Value); 
    x.change(); 
} 

が、私はこのプログラムでやっていると私は、ユーザーに計算された値を表示するために計算を再作成する必要があります。これは私がやっている方法です。

サイクルは1回だけ実行されます。 onchangeイベントをトリガした後、コードの実行がサイクルを終了し、私は理由を知らない。 私はすでにme.datasource.DocLines.lengthをチェックしています。これは常に1以上です。これは、サイクルが少なくとも2回実行されることを意味します。

これはなぜ起こっているのか?

編集 さらに詳しい情報:

これは私がドロップダウンコントロール

 for (i = 0; i < dbdata.length; i++) { 
      if ((dbdata[i].Provider) == "False") { //create dropdownboxes events 
       if ((dbdata[i].Dimension) != "True") { 

        $('#subproduct_' + dbdata[i].Code).change({ 
         me: me 
        }, doSomething); 
       } 
      } 
    } 
    //.... 

に機能を関連付けられている方法です。この「doSomethingのは、」1回だけ実行されます。ブレークポイントを設定することで確認できます。

+1

コンソールにエラーはありませんか?ループを壊す 'change()'はどういうことでしょうか? – DontVoteMeDown

+0

コンソールにエラーはありません。私はfor-loop(data = me.datasource.DocLines [i];)の最初の行にブレークポイントを設定し、コードはそこで停止しません。また、私はそれが1回だけ実行されていることを計算したいという値でチェックすることができます(これは合計です)。また、私は "onchange"イベントにある関数にブレークポイントを設定しましたが、それは一度だけ停止します。 – RSilva

+1

これらは重要な情報です。一度にループの後にすべての変更イベントを実行しようとしましたか? – DontVoteMeDown

答えて

0

"i"イテレータを新しい変数に変更することで、私の問題は解決されました。また、 "doSomething"関数で "i"変数が使用されていました。

+1

グローバルスコープを避けてループスコープで 'i'を宣言すると、たとえばfor(var i = 0 ...' – DontVoteMeDown

関連する問題