2011-12-03 21 views
0

私のアプリケーションには、GoogleマップV3 APIでJavascriptを使用しています。 私のコードvaiNameが配列であるGoogleマップに動的フォームを送信できませんplace_changedイベント

for(var i = 0; i < viaName.length; i++) { 
    // some other code...... 
    google.maps.places.Autocomplete(document.forms[i+1].txtVia)); 
    autocomplete[i+1].bindTo('bounds', map); 
    google.maps.event.addListener(autocomplete[i], 'place_changed', function() { 
     doSomething(document.forms[i+1]); }); 
} 

私のページには複数のフォームがあり、その中にテキストを予測するためにオートコンプリートとバインドされたテキストボックスがあります。私が望むのは、テキストがページの任意のテキストボックスで変更されたときにdoSomething()関数が呼び出されることです(したがって複数のフォームが使用され、テキストボックスが使用されます)。

例:viaName.length = 4の場合、どのフォームのどのテキストボックスでもイベントをトリガーしても、doSomething関数はページのdocument.forms[4]を取得します。

答えて

0

viaName.length = 4の場合、上記のコードからわかるように、1から4の値が常にdoSomething関数に渡されます。それを止めるif文はありません。これは、viaName.length = 4のときに上記のfor文で0から3まで繰り返され、doSomething [1、2、3、4]を渡します。それは私が提供したコードから見ることができるすべてです。

+0

応答スミス、ありがとう、私は知っているが、イベント(place_change)イベントが発生し、このイベントが発生したフォームのオブジェクトを渡したいときdoSomething関数が呼び出されます。前述のように、私は複数のフォームを持っているので、forループを使用しています。このコードでは、forループはフォームオブジェクトをdoSomething関数に渡すためにリスナーをバインドします。間違っているなら私を訂正しますか? – user1078663

+0

さて、あなたは今何をしているのか分かります。ですから、place_changedイベントが発生するたびに私が集めるものから、あなたがdocument.forms [4]にいると常に考えていますか?この場合、addListenerがオートコンプリートボックスにアタッチされているときに問題が発生します。数行のコードを大まかに見ると、繰り返しているものと同じものを上書きするたびに新しいオートコンプリートを作成する必要があるように見えます。これにより、forループの最後の繰り返しが4になります。うまくいけば、あなたが現在列挙しているコードから見るのが難しいのは間違いです。 –

関連する問題