2011-06-24 10 views
2

このコードを使用していますが、うまくいきます。今、私は入力の名前だけを変更する必要があります、入力1、入力2、など。ループの問題

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#input1 > select.profissao").live('change', function(){ 
      $.ajax({ 
       type: "POST", 
       data: "data=" + $(this).val(), 
       url: "drop1.php", 
       success: function(html) { 
        $("#input1 > select.estatistica").html(html); 
       } 
      }); 
     }); 
}); 
</script> 

なぜこのバージョンが機能しないのですか?私はすでにlintでコードをチェックし、エラーは検出されません。 基本的に上記のコードをコピーしてinput1をinput2に変更すると正常に動作しますが、私の目的は冗長性を減らすことです。

<script type="text/javascript"> 
    $(document).ready(function() { 
     for (i=1; i<3; i++) { 
     $("#input"+i+" > select.profissao").live('change', function(){ 
      $.ajax({ 
       type: "POST", 
       data: "data=" + $(this).val(), 
       url: "drop1.php", 
       success: function(html) { 
        $("#input"+i+" > select.estatistica").html(html); 
       } 
      }); 
     }); 
     } 
    }); 
</script> 

EDIT:出力はその<option value=2>Artes</option><option value=1>Humanidades</option>ようなものですが、これは、単純なストップダウン私のドロップが

+0

を選択すると、私はあなたがおそらくすべての入力に対してイベントハンドラなしでこれを処理できると感じています。 – Ben

答えて

3

を動作するようにループしてHTML

に追加されていないあなたは

を試すことができます
<script type="text/javascript"> 
$(document).ready(function() { 
    for (i=1; i<3; i++) { 
     (function(idx){ 
      $("#input"+idx+" > select.profissao").live('change', function(){ 
      $.ajax({ 
       type: "POST", 
       data: "data=" + $(this).val(), 
       url: "drop1.php", 
       success: function(html) { 
       $("#input"+idx+" > select.estatistica").html(html); 
       } 
      }); 
      }); 
     })(i); 
    } 
}); 
</script> 

そして、あなたの関数はスコープ内でiの同じ参照を取得します。

+1

これは正しいと思います。それはjavascriptのクロージャのためです。ここで良い説明https://developer.mozilla.org/ja/JavaScript/Guide/Closures#Creating_closures_in_loops.3a_A_common_mistake – Equiso

+0

@エキソはい、それは非常に一般的な間違いです... – YeJiabin

+0

はい、私の問題を解決してください。ありがとう:) – user455318

0

トップブロックとボトムブロックには異なるクラスがあります。選択問題は1つですか?

また、連結アプローチは維持しにくいようです。また、IEで選択のHTMLコンテンツをスワップアウトすることは非常によく対応していないですし、再構築を検討する必要がありますので、私にとってはかなりの数のバグにつながっている:

おそらく、この

$('#input1, #input2, #input3').children('select.area').each(function() { 
     $(this).live(...); 
    }); 

編集のようなものを使用することを検討してくださいあなたがHTMLを投稿することができる度に、

+0

?どこ? – user455318

+0

ああ、あなたは忍者が編集したんだよ;)最初の投稿で –

+0

私は他のバージョンを笑った。ありがとう – user455318