1

プロジェクトに割り当てられたシステムを出力するフォームがあります。システムはループされ、新しい行を動的に追加できるため、ID属性を使用することはできません。

ユーザーがステータスドロップダウンオプションを変更する場合、関連する[ステータス効果日]フィールドが必須になる必要があります。日付ピッカーのクラスでフィールドを見つけるのに十分なほどDOMをトラバースする方法がわかりません。

<tr>  
    <th class="form">
        <label>Status</label>
    </th>  
    <td>
        <div style="float:left;">  
        <select class='status' name="status" >  
            <option value="New">New</option>  
            <option value="Existing">Existing</option>  
            and so on...  
        </select>  
        </div>
    </td>  
    <th class="form">
        <label>Status Eff. Date</label>
    </th>  
    <td>
        <div style="float:left;">  
            <input type="text" name="statuseffective" class="datepicker" size="15" >  
        </div>
    </td>  
</tr> 

スペルアウトすると、プロセスは次のよう
に機能します。ユーザーがステータスを変更すると、JSはクラス.datepickerとaddClass('required')を含む次の入力フィールドを見つけ、このフィールドにフォーカスを設定します( addClass'required'はすでにフィールドを赤にするため、フォーカスの設定はオプションです)。

どのドロップダウンボックスが変更されたかを判断できますが、次の入力要素にたどり着くことができません。どんな助けでもいただければ幸いです。

4

2 に答える 2

1

.datepickerが.statusと同じ親の下にないことがわかったので、ここで...私の答えを編集します。

$( "。status")。live( "click"、function(){$(this).parent()。find('input.datepicker')。addClass( "required")。focus();)};

于 2011-04-20T17:10:28.823 に答える
1
$('.status').change(function(){
    $(this).next('input.datepicker').addClass("required").focus();
});

トリックを行う必要があります。

アップデート

わかりました...両方に同じ親がいないため、レベルを上げる必要があります。nextは直接次の要素のみを検索し、nextAllはすべての要素を検索します(同じdomレベルで表示されます)。それを行うためのさまざまな方法をテストし、これを思いついた:

$('.status').change(function(){
    $(this).parents('td').nextAll("td:first").find('.datepicker').focus()
});

それはあなたのためのトリックをするはずです!

于 2011-04-20T17:15:56.860 に答える