Alvaros JS'nin ücretsiz cevabı benim için harika bir başlangıçtı ve yine de resimlerle bir Select'ten beklenen tüm işlevselliği sağlayan gerçekten JS'siz bir cevap almaya çalıştım, ancak maalesef iç içe yerleştirme formları düşüş oldu. Burada iki çözüm yazıyorum; 1 satır JavaScript kullanan ana çözümüm ve başka bir formda çalışmayan, ancak nav menüleri için faydalı olabilecek tamamen JavaScript içermeyen bir çözüm.
Maalesef kodda biraz tekrar var, ancak bir Select'in ne yaptığını düşündüğünüzde mantıklı geliyor. Bir seçeneğe tıkladığınızda, bu metni seçilen alana kopyalar, yani, 4 seçeneğin 1'ine tıklamak 4 seçeneği değiştirmez, ancak şimdi üstte tıkladığınız metni tekrarlar. Bunu resimlerle yapmak için JavaScript, orrrr gerekir ... girişleri kopyalarsınız.
Örneğimde sürümleri olan oyunların (Ürünler) bir listesi var. Her ürün ayrıca sürümlere sahip olabilen Genişlemelere sahip olabilir. Her Ürün için, kullanıcıya, birden fazla sürüm varsa her sürümün bir listesini, bir görsel ve sürüme özel bir metinle birlikte veriyoruz.
<h4>@Model.Name</h4>
@if (Model.Versions.Count == 1)
{
<div class="rich-select-option-body pl-2">
<img src="@Model.Versions[0].ImageUrl" alt="">@Model.Versions[0].VersionName (@Model.Versions[0].Year)
</div>
}
else
{
<h5>Select the version</h5>
<div class="rich-select custom-select">
<div class="rich-select-dropdown">
@foreach (var version in Model.Versions)
{
<div class="rich-select-option">
<input type="radio" name="game" id="game-@version.ProductId-@version.VersionId" @if (version == Model.Versions.First()) { @Html.Raw(" checked") ; } />
<div class="rich-select-option-body">
<label tabindex="-1">
<img src="@version.ImageUrl" alt="">@version.VersionName (@version.Year)
</label>
</div>
</div>
}
</div>
<input type="checkbox" id="rich-select-dropdown-button" class="rich-select-dropdown-button" />
<label for="rich-select-dropdown-button"></label>
<div class="rich-select-options">
@foreach (var version in Model.Versions)
{
<div class="rich-select-option">
<div class="rich-select-option-body">
<label for="game-@version.ProductId-@version.VersionId" tabindex="-1" onclick="document.getElementById('rich-select-dropdown-button').click();">
<img src="@version.ImageUrl" alt=""> @version.VersionName (@version.Year)
</label>
</div>
</div>
}
</div>
</div>
}
Onay kutusu seçimini kaldırmak için JS kullanarak bir form üzerinde birden fazla örneğe sahip olabiliriz. Burada, sürümler için aynı mantığa sahip olan Genişlemelerin bir listesini göstermek için genişlettim.
<h5 class="mt-3">Include Expansions?</h5>
@foreach (var expansion in Model.Expansions)
{
<div class="form-row">
<div class="custom-control custom-checkbox w-100">
<input type="checkbox" class="expansion-checkbox custom-control-input" id="exp-@expansion.ProductId">
<label class="custom-control-label w-100" for="exp-@expansion.ProductId">
@if (expansion.Versions.Count == 1)
{
<div class="rich-select-option-body pl-2">
<img src="@expansion.ImageUrl" />@expansion.Name: @expansion.Versions[0].VersionName (@expansion.Versions[0].Year)
</div>
}
else
{
<div class="rich-select custom-select">
<div class="rich-select-dropdown">
@foreach (var version in expansion.Versions)
{
<div class="rich-select-option">
<input type="radio" name="exp-@version.ProductId" id="exp-@version.ProductId-@version.VersionId" @if (version == expansion.Versions.First()) { @Html.Raw(" checked") ; } />
<div class="rich-select-option-body">
<label tabindex="-1">
<img src="@version.ImageUrl" alt="">@expansion.Name: @version.VersionName (@version.Year)
</label>
</div>
</div>
}
</div>
<input type="checkbox" id="rich-select-dropdown-button-@expansion.ProductId" class="rich-select-dropdown-button" />
<label for="rich-select-dropdown-button-@expansion.ProductId"></label>
<div class="rich-select-options">
@foreach (var version in expansion.Versions)
{
<div class="rich-select-option">
<div class="rich-select-option-body">
<label for="exp-@version.ProductId-@version.VersionId" tabindex="-1" onclick="document.getElementById('rich-select-dropdown-button-@expansion.ProductId').click();">
<img src="@version.ImageUrl" alt="">@expansion.Name: @version.VersionName (@version.Year)
</label>
</div>
</div>
}
</div>
</div>
}
</label>
</div>
</div>
Tabii ki , bu zaten çok büyük olan cevabın boyutunu küçültmek için sadece bu JSFiddle'a dahil ettiğim oldukça CSS gerektiriyor . Gerekli miktarı azaltmak ve ayrıca diğer Bootstrap kontrollerine ve yapılmış herhangi bir site özelleştirmesine uymasına izin vermek için Bootstrap 4'ü kullandım.
Görüntüler 75px olarak ayarlanmıştır, ancak bu 5 satırda kolayca değiştirilebilir .rich-select
ve.rich-select-option-body img