0

以下のコードで私が間違っていることを見つけることができますか?私はそれが最もエレガントなコードではないことを知っていますが、私は現在5つのことを行っており、この簡単なコードをすぐにノックアウトしてプレートから外すことができると思いました。

選択したプロジェクトタイプが特定の値と等しい場合はフィールドセットを表示し、その値と等しくない場合はフィールドセットを非表示にします。とても簡単ですよね?選択した値が一致しない場合、フィールドセットを非表示にすることができません。

念のために言っておきますが、私はjqueryを初めて使用しますが、これは基本的なif /elseです。ここで何が間違っているのでしょうか。前もって感謝します。

$('fieldset#section-841', 'fieldset#section-837' ).hide();
var DM_projtype = new Array(
        {value : 'Direct Mail', sect_id : 'fieldset#section-841'},
        {value : 'Multiple items', sect_id : 'fieldset#section-837'}
    );
$('select#3596').change(function() {
    var getDM_projType = $(this).val();
    var sect_id = '';
     for (var i = 0; i < DM_projtype.length; ++i) 
        {
            if (DM_projtype[i].value == "Direct Mail" )
                {
                    sect_id = DM_projtype[i].sect_id;
                   $(sect_id).show();
                }
            else
                {
                   $('fieldset#section-841').hide(); 
                }
            if (DM_projtype[i].value == "Multiple items" )
                {
                    sect_id = DM_projtype[i].sect_id;
                   $(sect_id).show();
                }
            else
                {
                   $('fieldset#section-837').hide(); 
                }
       }
  });
4

1 に答える 1

2

ロジックに対してコードを構造化したようです。配列の各要素はループを介して処理されるため、含まれている各ブロックセットのifとelseの両方を実行します。代わりにこれを行う必要があります:

$('select#3596').on('change', function() // do .change() if using a lower jQuery version
{
    var thisVal = $(this).val(); // Assuming this returns 'Direct Mail' or 'Multiple Items'

    $(DM_projtype).each(function()
    {
         $(this.sect_id).hide();

         if(this.value == thisVal)
            $(this.sect_id).show();
    });
});
于 2012-04-24T15:08:58.640 に答える