在 primefaces selectOneRadio 中使用图像选择单选按钮

Use image for radio button selection in primefaces selectOneRadio

我正在尝试使用 primefaces selectOneRadio 构建 UI。 目前我需要能够显示 5 个图像,它们实际上是单选按钮,并且在 selected 时图像会出现蓝色边框。隐藏了实际的单选按钮。

我尝试了带有自定义布局的 primefaces selectOneRadio,但单击图像没有 select 单选按钮,而且该按钮也可见。

这是我的代码。我为 css.

使用粉底
<ul class="small-block-grid-5">
            <p:selectOneRadio value="scooter" id="vehicleType" layout="custom">
                <f:selectItem itemValue="scooter" />
                <f:selectItem itemValue="bike"/>
                <f:selectItem itemValue="car"/>
                <f:selectItem itemValue="plane" />
                <f:selectItem itemValue="unknown" />
                <f:ajax event="click" render="addCost"/>
            </p:selectOneRadio>

            <li>
                <p:radioButton id="scooter" for="vehicleType" itemIndex="0"></p:radioButton>
                <h:graphicImage for="scooter" value="/images/scooter.GIF" width="50" height="50"/>
            </li>
            <li>
                <p:radioButton id="bike" for="vehicleType" itemIndex="1"></p:radioButton>
                <h:graphicImage for="bike" value="/images/bike.GIF" width="50" height="50"/>
            </li>
            <li>
                <p:radioButton id="car" for="vehicleType" itemIndex="2"></p:radioButton>
                <h:graphicImage for="car" value="/images/car.GIF" width="50" height="50"/>
                <h:panelGroup id="addCost">
                <h:outputText styleClass="breadcrumbs" value="Add 10$" />
                </h:panelGroup>
            </li>
            <li>
                <p:radioButton id="plane" for="vehicleType" itemIndex="3"></p:radioButton>
                <h:graphicImage for="plane" value="/images/plane.GIF" width="50" height="50"/>
            </li>
            <li>
                <p:radioButton id="unknown" for="vehicleType" itemIndex="4"></p:radioButton>
                <h:graphicImage for="unknown" value="/images/unkown.GIF" width="50" height="50"/>
            </li>
        </ul>

我使用一些 css 和基础解决了这个问题。

             <ul class="small-block-grid-5">
                <p:selectOneRadio value="scooter" id="vehicleType" layout="custom">
                    <f:selectItem itemValue="scooter" />
                    <f:selectItem itemValue="bike"/>
                    <f:selectItem itemValue="car"/>
                    <f:selectItem itemValue="plane" />
                    <f:selectItem itemValue="unknown" />
                    <f:ajax event="click" render="addCost"/>
                </p:selectOneRadio>

                <li>
                <div class="row">
                    <div class="small-1 columns invisibleDiv ">
                    <p:radioButton id="scooter" for="vehicleType" itemIndex="0"></p:radioButton>
                    </div>
                    <div class="small-11 columns imgSec">
                    <h:graphicImage for="scooter" value="/images/scooter.GIF" width="50" height="50"/>
                    </div>
                </div>
                </li>
            </ul>

css

.invisibleDiv {
    visibility: hidden;
}
.borderDiv {
    border: 1px solid blue;
}

js

$(".imgSec").click(function(){
        var radioInput= $(this).prev(".invisibleDiv ");
        $(".imgSec").removeClass("borderDiv");
        $(this).addClass("borderDiv");
    });