Çözümüme göz atın. Anahtar ifadelerini desteklememeye eğilimliyim çünkü hantallaşabilirler, bu yüzden düzenli bir ifade kullandım.
Aşağıdaki kod, program-type
seçiminin değeri değiştirildiğinde her zaman bağımlılık işlevini çağırır. Daha sonra role
seçme öğesinin her bir seçeneğiyle, her seçeneğin veri bağımlılık özniteliğine karşı program-type
seçme öğesinin geçerli değerini denetler.
Normal ifade, özniteliğin değerlerden (virgülle ayrılmış değerlerden) veya bir yakalama değerinden (bu durumda *
yaptığım) eşleşip eşleşmediğini kontrol eder - örneğin, ilk seçenek program-type
için seçildi, regex karşılaştırma gibi bir şeye hesaplar:
"1".match(/\*|1/i) // true
"2,3".match(/\*|1/i) // false
"*".match(/\*|1/i) // true
Eşleşmezlerse, ben hiçbiri seçeneğin ekranı kurdum - ancak isterseniz sadece bunu devre dışı bırakabilirsiniz .. Gerçekten istediğin bir şey. Normal ifadeler yeniyseniz
, ben bu yardımcı olur regexr
Umut öneriyoruz. nakledilmiş
function dependency(e){
var roles = document.querySelectorAll('#role option')
for(var i = 0 ; i < roles.length ; i++) {
var re = new RegExp('\\*|' + e.currentTarget.value, 'i')
if(roles[i].dataset.dependency.match(re)) roles[i].style.display = 'block'
else roles[i].style.display = 'none'
}
}
document.querySelector('#program-type').addEventListener('change', function(e){
dependency(e)
})
<select id="program-type" name="program-type">
<option value="default" disabled selected>Select Program-Type</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<select id="role" name="role">
<option value="foo" data-dependency="*" disabled selected>Select role</option>
<option value="foo" data-dependency="1">foo</option>
<option value="bar" data-dependency="2,3">bar</option>
<option value="baz" data-dependency="*">baz</option>
</select>
Bütün bir program açıklamasıdır. Ancak, size [belirli bir soru sormak için] ihtiyacımız var (http://stackoverflow.com/help/how-to-ask). Bizden ne istediğinden emin olamayız. Lütfen yanıtlayabileceğimiz geçerli bir soru eklemek için gönderinizi düzenleyin. Hatırlatma: [Buradaki konu nedir?] 'I (http://stackoverflow.com/help/on-topic) bildiğinizden, programın sizin için yazmamızı istediğinden ve öneri veya yönergelerin konu dışı olduğundan emin olun. –
Aşağıdaki beyefendi veya hanımefendi soruyu mükemmel bir şekilde anladı ve tam olarak nasıl istediğimi cevapladı ve yanıtlanmasını bekledim. İlham için rehberliğe ihtiyacım vardı - fantastik girişiniz için teşekkürler. –