将图像添加到 html 类型输入复选框或单选框

Posted

技术标签:

【中文标题】将图像添加到 html 类型输入复选框或单选框【英文标题】:add an image to a html type input check box or radio 【发布时间】:2011-07-04 06:41:39 【问题描述】:

我正在尝试为 html 输入类型复选框和单选框的未选中和选中值指定一个图像。

我有这个:

background: url("image.png") no-repeat;

但它似乎不适用于单选按钮和仅复选框按钮。

有没有人知道一些可行的方法?

【问题讨论】:

希望这不是由于定位,因为复选框相对于按钮非常小?图像背景虽然已应用,但可能因此被隐藏。 【参考方案1】:

我已经找到并找到了答案。 在这些论坛的帮助下 http://forums.digitalpoint.com/showthread.php?t=665980

所有代码如下:您可以复制到单个文件并添加自己的图像,它会起作用。

<html>
<script type="text/javascript">
//global variables that can be used by ALL the function son this page.
var inputs;
var imgFalse = '52 0 ROff.png';
var imgTrue = '52 0 ROn.png';

//replace the checkbox with an image and setup events to handle it
function replaceChecks() 
    //get all the input fields on the page
    inputs = document.getElementsByTagName('input');

    //cycle trough the input fields
    for(var i=0; i<inputs.length; i++) 

    //check if the input is a checkbox
    if(inputs[i].getAttribute('type') == 'checkbox') 

        //create a new image
        var img = document.createElement('img');

        //check if the checkbox is checked
        if(inputs[i].checked) 
            img.src = imgTrue;
         else 
            img.src = imgFalse;
        

        //set image ID and onclick action
        img.id = 'checkImage'+i;
        //set image
        img.onclick = new Function('checkClick('+i+')');

        //place image in front of the checkbox
        inputs[i].parentNode.insertBefore(img, inputs[i]);

        //hide the checkbox
        inputs[i].style.display='none';
    



//change the checkbox status and the replacement image
function checkClick(i) 
if(inputs[i].checked) 
    inputs[i].checked = '';
    document.getElementById('checkImage'+i).src=imgFalse;
 else 
    inputs[i].checked = 'checked';
    document.getElementById('checkImage'+i).src=imgTrue;



</script>
</html>
<body>
<input type="checkbox" />
<script type="text/javascript">replaceChecks();</script>
</body>

【讨论】:

工作完美,没有任何问题。一开始我只是很困惑,因为您用空格写了图像的名称。谢谢!【参考方案2】:

看看这个Ryan Fait - Custom checkboxes and radio buttons ...希望它是你要找的东西;)

【讨论】:

我见过这个,但它看起来有点复杂,我想知道是否有更简单的方法? 什么都不知道但不要害怕,它并不像看起来那么复杂 我刚刚试图让 ryan fait 的事情发挥作用,但图像无法正常工作。 嗯,这很奇怪,我不费吹灰之力就让它工作了。一定有“小事”出了问题,迫使它不起作用。 我成功了,但我无法隐藏“旧”复选框图像。它显示了两个复选框,一个是我创建的,另一个是常规复选框。有什么帮助吗?【参考方案3】:

如果你想改变图像或/和颜色的复选框,那么优化的方式是http://jsfiddle.net/nsoni/4cHSB/5/在这里你可以点击“项目名称”或“复选框”并获得效果。

HTML:

  <div class="had">
        <div class="ch">
            <input type="checkbox" id="sho1" name="chk1">
            <div class="so"></div>
            <label for="sho1">Select one</label>
        </div>
        <div class="ch">
            <input type="checkbox" id="sho2" name="chk2">
            <div class="so"></div>
            <label for="sho2">Select two</label>
        </div>
    </div>

CSS:

    input 
               display: none;
    

        input [type=checkbox]:checked+.so
              background-image:url('http://goo.gl/3tza1X');
              background-repeat:no-repeat;background-color:green;
              border-radius:50%;background-position: -2px -1px;
    

        input [type=checkbox]:checked+.so+label
           color: red;
    

        .so 
             margin: 2px; float: left;height: 30px;width: 30px;
             border: 3px solid #D8D8D8;background-color: #4679BD;
             border-radius: 5px;
    

        .show 
               margin-left: 30px;
    

        .had 
               margin: 50px auto;width: 50%;border: 1px solid black;
               height: 30px;padding:10px;
    

        .ch 
              float: left;margin-left:20px;width:40%
    

        label 
               height: 30px;width: 100%;position:relative;
               display:block;margin-top: 5px;
    

【讨论】:

【参考方案4】:

您不能通过纯 CSS 设置复选框和单选按钮的样式。你将需要一个 JavaScript 插件(那里有很多 jQuery 插件)来为你做这件事。基本上,它通过保持默认元素的行为将另一个元素覆盖在默认元素之上。

【讨论】:

所以在 css 中没有办法将图像添加到单选框和复选框中,用 javascript 最简单的方法是什么【参考方案5】:

这就是我的做法。我正在使用无线电输入。输入框被隐藏,每个标签中的图像在选择/未选择输入时发生变化。

Jsfiddle:http://jsfiddle.net/EhDsf/

HTML:

<div class="options">
    <label title="item1">
        <input type="radio" name="foo" value="0" /> 
      Item 1
        <img />

   </label>
    <label title="item2">
        <input type="radio" name="foo" value="1" />
        Item 2
        <img />
    </label>   
    <label title="item3">
        <input type="radio" name="foo" value="2" />
        Item 3
        <img />
    </label>
</div>

CSS:

div.options > label > input 
    visibility: hidden;


div.options > label 
    display: block;
    margin: 0 0 0 -10px;
    padding: 0 0 48px 0;  
    height: 20px;
    width: 150px;



div.options > label > img 
    display: inline-block;
    padding: 0px;
    height:60px;
    width:60px;
    background: url(https://cdn2.iconfinder.com/data/icons/snipicons/500/thumbs-down-128.png);
    background-repeat: no-repeat;
    background-position:center center;
    background-size:60px 60px;


div.options > label > input:checked +img   
    background: url(https://cdn1.iconfinder.com/data/icons/onebit/PNG/onebit_34.png);
    background-repeat: no-repeat;
    background-position:center center;
    background-size:60px 60px;

【讨论】:

以上是关于将图像添加到 html 类型输入复选框或单选框的主要内容,如果未能解决你的问题,请参考以下文章

用于多个动态创建的复选框或单选组的 jquery 验证器

是否可以将图像放入输入类型 =“复选框”?

如何在 swift (iOS) 中创建单选按钮和复选框?

为啥滚动网格中的 jqxgrid 未选中复选框或单选按钮列?

Jquery按空格键选中复选框或单选框

将值推送到复选框或单选更改上的数组的功能