0

dom の次の入力を読み取り専用に設定しようとしていますが、うまくいきません。

jQuery は次のとおりです。

$('select.expense-code').change(function(e) {

    // If expense code is travel mileage
    if ($(this).val() == '5') {
        // Set miles to read only
        var currentRowAmount = $(e.target).next("input.amount");
        currentRowAmount.attr('readonly', true);
    }

});

dom のその部分は次のとおりです。

ドム

背景色などを設定しようとしましたが、何も機能しません。.next() ビットまでは確かですが、正しい方向にプロドが必要です。Console.log() は [] を与えるだけです。

前もって感謝します

4

2 に答える 2

2

.next()すぐ次の兄弟を取得します。何も検索しません。フィルター引数は、次の兄弟がフィルター内にあることを確認するためのものです。

ドキュメントから:

説明: 一致した要素のセット内の各要素の直後の兄弟を取得します。セレクターが指定されている場合、そのセレクターに一致する場合にのみ、次の兄弟を取得します。

ターゲットにはすでに id があるので、次のようにするだけです。

// current id ($(this).prop('id')) is Expense0ExpenseCode
var curId = $(this).prop('id');

// you are targetting Expense0Amount, which has the same Expense0 as the prefix
// so replace the suffix (ExpenseCode -> Amount):
var targetId = curId.replace('ExpenseCode', 'Amount');

// do the prop change
$('#' + targetId).prop('readonly', true);

ワンライナー:

$('#' + $(this).prop('id').replace('ExpenseCode', 'Amount')).prop('readonly', true);
于 2012-08-16T10:47:48.280 に答える
0

あなたの要素はまったく兄弟ではありません.2つの異なる親.span1要素の中にあります:

$('select.expense-code').on('change', function(e) {
    if ($(this).val() == '5') {
        $(this).closest('.span1')
               .next('.span1')
               .find('input.amount')
               .prop('readonly', true);
    }
});
于 2012-08-16T10:51:55.193 に答える