2016-04-01 6 views
0

anoter tıklanan öğeye dayalı en yakın öğeyi bulun Yeni satır ekleyebilir, satır silebilirsiniz dinamik bir form var. 2 .row s olduğuJavascript

// HTML 
<div class="row"> 
    <div class="col-xs-4"> 
    <ul> 
     <li><input type="checkbox"></li> 
     <li><input class="landmark" type="checkbox" value="4" name="patient[block_procedure_part2_notes_attributes][0][monitoring_device_ids][]" id="patient_block_procedure_part2_notes_attributes_0_monitoring_device_ids_4" /></li> 
     <li><input type="checkbox"></li> 
     <li><input type="checkbox"></li> 
    </ul> 
    </div> 
    <div class="col-xs-8"> 
    <ul> 
     <li><input type="checkbox"></li> 
     <li><input class="us_image" type="radio" value="clear" checked="checked" name="patient[block_procedure_part2_notes_attributes][0][us_image]" id="patient_block_procedure_part2_notes_attributes_0_us_image_clear" /></li> 
     <li><input class="us_image" type="radio" value="clear" checked="checked" name="patient[block_procedure_part2_notes_attributes][0][us_image]" id="patient_block_procedure_part2_notes_attributes_0_us_image_poor" /></li> 
     <li><input type="checkbox"></li> 
    </ul> 
    </div> 
</div> 
<div class="row"> 
    <div class="col-xs-4"> 
    <ul> 
     <li><input type="checkbox"></li> 
     <li><input class="landmark" type="checkbox" value="4" name="patient[block_procedure_part2_notes_attributes][1][monitoring_device_ids][]" id="patient_block_procedure_part2_notes_attributes_1_monitoring_device_ids_4" /></li> 
     <li><input type="checkbox"></li> 
     <li><input type="checkbox"></li> 
    </ul> 
    </div> 
    <div class="col-xs-8"> 
    <ul> 
     <li><input type="checkbox"></li> 
     <li><input class="us_image" type="radio" value="clear" checked="checked" name="patient[block_procedure_part2_notes_attributes][1][us_image]" id="patient_block_procedure_part2_notes_attributes_1_us_image_clear" /></li> 
     <li><input class="us_image" type="radio" value="clear" checked="checked" name="patient[block_procedure_part2_notes_attributes][1][us_image]" id="patient_block_procedure_part2_notes_attributes_1_us_image_poor" /></li> 
     <li><input type="checkbox"></li> 
    </ul> 
    </div> 
</div> 

// Javascript 
var landmark = $('input.landmark'); 

landmark.change(function(event) { 
    var usImageOptions = $(event.target).closest('input.us_image'); 
    if (landmark.prop('checked')) { 
    resetInputs(usImageOptions); 
    controlFormSub(); 
    disableInputs(usImageOptions, true); 
    } else { 
    disableInputs(usImageOptions, false); 
    } 
}); 

görebilirsiniz: İşte kod. Ekleme düğmesiyle daha fazla satır eklenebilir veya kaldır düğmesiyle kaldırılabilir.

Burada, kontrol edilen en yakın .landmark numarasına karşılık gelen usImageOptions radyo düğmelerini devre dışı bırakmaya çalışıyorum. 1 .row numaralı telefondan .landmark işaretliyse, 1 .row ürününün .usImageOptions temizlenmiş ve devre dışı bırakılmalıdır. 2. .row, sağlam olmalıdır.

Diğer sınıflara göre bulmaya isteksizim çünkü eğer değiştiyse, bu kod kırılacaktı.

Aynı satır içinde .usImageOptions seçmek için sayısız yolu denedim ama yapamadı. Ne yapmalıyım? jQuery kullanıyorsanız

cevap

1

kullanarak sona erdi .us_image içinde bulunan .row.

0

, oradan da radyo düğmeleri .row ebeveyn kapmak ve seçebilirsiniz:

$('.landmark').on('change', function(e){ 
    $(this).parents('.row').find('.us_image').prop('disabled', true); 
}); 

EDIT: Eğer daha fazla satır ekliyoruz yana, büyük olasılıkla kullanmanız gerekir Eklenen tüm satırları yakalayabilmeniz için etkinlik temsilcisi. Ardından bakmak

var usImageOptions = $(event.target).closest('.row').find('.us_image'); 

Bu ilk önce, tıklanan elemanı tespit yakın .row arayacaktır (birçok olmasına rağmen, ancak yalnızca en yakın yukarıdaki seçecektir):

$(document.body).on('change', '.landmark', function(e){ 
    $(this).parents('.row').find('.us_image').prop('disabled', true); 
}); 
+0

Diğer sınıflara güvenmeden yapabilir miyim? Çünkü işaretleme değişirse, bu betik bozulur. – Victor

+0

Elbette. Sınıfları tamamen göz ardı ederek, her zaman ': onay kutusu 've': radyo'ya göre seçim yapabilirsiniz. Onların yorum atalarına nasıl ulaşacağını bildiğiniz sürece iyi olacaksınız. Yukarıdaki örnekteki 'DI'den' DI''ye 'UL’'den 'DI''ye gitmek için .parent(). Parent(). Parent(). Parent()' işlevini bile kullanabilirsiniz. – ajm

+0

Her bölüm ayrıca .row'a sahip olduğu için, bulduğumda tüm 4 .usImageOptions içerir. Ama sadece aynı .row içinde en yakın 2'yi istiyorum. – Victor