使用ID替换带有图像的单选按钮

时间:2012-09-12 14:17:49

标签: jquery input radio

我正在寻找用不同的图像替换标准输入无线电,​​基本上是无线电本身的视觉分级比例,我需要一个不依赖于使用标签标签的跨浏览器解决方案。我已经在实际问题文本中使用label标签。我想通过定位输入的ID来进行图像切换。这可以用jquery完成吗?正如我所说,标签标签不能用于此,我看到的每个例子都使用标签,这是不可能的。

基本上,这就是我所拥有的代码。

 <label>Question Goes Here</label>
 <input type="radio" name="question1" id="Best"    value="5" />
 <input type="radio" name="question1" id="Better"  value="4" />
 <input type="radio" name="question1" id="Average" value="3" />
 <input type="radio" name="question1" id="Worse"   value="2" />
 <input type="radio" name="question1" id="Worst"   value="1" />

2 个答案:

答案 0 :(得分:2)

var images = {
  Best: 'path_to_image',
  Better: 'path_to_image',
  Average: 'path_to_image',
  Worse: 'path_to_image',
  Worst: 'path_to_image'
};

$('input[type=radio][name^=question]').each(function() {
   var id = this.id;
   $(this)
          .hide()  // hide the radio button
          .after('<img src="'+ images[id] +'">'); // insert the image 
                                                  // after corresponding radio
});

答案 1 :(得分:1)

我扩展了codeparadox的答案并添加了可见检查状态的基本功能。这是小提琴:http://jsfiddle.net/crowjonah/cfN5t

我重新构建了插入的.after,并从this answer大量借用,添加了.live点击功能,实际上会检查并取消选中隐藏的单选按钮,并为您提供机会使用CSS更改其外观。我选择使用CSS背景图像,而不是使用存储在js变量中的srcs的实际图像标签,并为每个输入添加了一个.radio-image类,我们将用作jQuery选择器,仅针对我们想要转向的单选按钮进入图像。这是HTML:

<label>How good?</label>
 <input type="radio" class="radio-image" name="question1" id="best"    value="5" />
 <input type="radio" class="radio-image" name="question1" id="better"  value="4" />
 <input type="radio" class="radio-image" name="question1" id="average" value="3" />
 <input type="radio" class="radio-image" name="question1" id="worse"   value="2" />
 <input type="radio" class="radio-image" name="question1" id="worst"   value="1" />

剧本:

   $(function() {
    $('input[type=radio].radio-image').each(function() {
        var id = this.id;
        $(this).hide().after('<a class="newrad" href="#"><div class="radio" id="' + id + '"></div></a>');
    });
    $('.newrad').live('click', function(e) {
        e.preventDefault();
        var $check = $(this).prev('input');
        $('.newrad div').attr('class', 'radio');
        $(this).find('div').addClass('checked');
        $('input[type=radio].radio-image').attr('checked', false);
        $check.attr('checked', true);
    });
});​

和CSS(我们现在定义图像和可选的检查状态):

label {display:block;}
.radio {
    opacity: 0.5;
    width: 80px;
    height: 80px;
    float: left;
    margin: 5px;
}
.checked {opacity: 1;}
#best {background: url(http://www.placehold.it/80&text=Best);}
#better {background: url(http://www.placehold.it/80&text=Better);}
#average {background: url(http://www.placehold.it/80&text=Average);}
#worse {background: url(http://www.placehold.it/80&text=Worse);}
#worst {background: url(http://www.placehold.it/80&text=Worst);}
​
相关问题