1

DOM の準備ができたときに jQuery を実行するのに問題があります。

私は 2 つのフォームを持っています。それぞれ<select>に、コードの実行時に他のフォーム要素をロードする必要があります。

ユーザーが最初にページをロードするとき、これらの選択をオンready()にして特定の属性 (フォーム アクション、ターゲットなど) を取得load()し、それをロードします。change()<select>

HTML

<form action="php/bagCreate/newBag_bag.php" method="post" id="form1">
  <select id="target" data-target="upForm" class="get" name="bagLevel">
    <option>1</option>   
    <option>2</option>  
    <option>3</option>   
  </select>        
</form>

<form action="php/bagCreate/storeItems_bag.php" method="post" id="form2">      
  <select id="target2" data-target="upFormType" class="get" name="itemName">
    <option>A</option>   
    <option>B</option>  
    <option>C</option>   
  </select>        
</form>

JS

これは単一のフォームで機能しますが、2番目のフォームはロードされません

$(document).ready(function(){
$('select.get').ready(function() {
    var action = $('select.get').parent().attr('action');
    var target = $('select.get').data('target');
    $('#'+target).load(action, $('select.get').parent().serializeArray());     
});

ready 関数内に変更select.getすると、どちらのフォームも読み込まれません。this

を使用change()すると、両方の形式で完全に機能しますが、少し繰り返します

$('select.get').change(function() {        
  var action = $(this).parent().attr('action');  
  var target = $(this).data('target');  
  $('#'+target).load(action, $(this).parent().serializeArray());      
});
4

4 に答える 4

4

pageload で変更イベントをトリガーするだけですか?

$('select.get').change(function() {        
  var action = $(this).parent().attr('action');  
  var target = $(this).data('target');  
  $('#'+target).load(action, $(this).parent().serializeArray());      
}).change(); //trigger it on pageload as well ...
于 2013-02-11T20:56:10.187 に答える
2

each()メソッドを使用して、コードをselectjQuery オブジェクトの複数の要素に適用します。また、コメントが示唆するように、ready()メソッドはdocumentオブジェクトに予約する必要があります。

例えば:

$(document).ready(function() {
    $('select.get').each(function(i) {
        var action = $(this).parent().attr('action');
        var target = $(this).data('target');
        $('#'+target).load(action, $(this).parent().serializeArray());
    });
});

each() コールバック関数の各反復で、オブジェクトのi番目の要素を$(this)参照する方法に注意してください。$('select.get')

于 2013-02-11T20:58:39.380 に答える
1

最初のコード スニペットは次のようになります。

$(document).ready(function(){
    $('select.get').each(function() {
        var action = $('select.get').parent().attr('action');
        var target = $('select.get').data('target');
        $('#'+target).load(action, $('select.get').parent().serializeArray());     
    }
);

ready メソッドを each メソッドに変更すると、セレクターで見つかった要素ごとに定義済みの関数が 1 回実行されます。

于 2013-02-11T21:01:21.123 に答える
0
$(document).ready(function(){
    $('select.get').each(function(){
        var $t = $(this);
        var $p = $t.parent();
        var action = $p.attr('action');
        var target = $t.data('target');
        $('#'+target).load(action, $p.serializeArray());
    });
});
于 2013-02-11T21:00:49.763 に答える