I need to create a group of 2 radio buttons (options: male / female) that display images instead of the actual buttons. The images should change upon selection. So there should be 4 images: male (on), male (off), female (on), female (off).
I'm using jQuery throughout the site, and I would like to use jQuery for this, too, if possible.
I've found various plugins that replace form controls and I'm using imageTick for checkbox replacement, it works fine. However, I can't figure out how to adapt the plugin, so I can use different images within one radio button group.
Thanks!
Radio buttons allow a user to select a single option among multiple options. You can set the Choice Value of each option, for each button, as well as group these buttons by giving them the same Group Name.
An easy way to change the style of a disabled radio button is a simple absolute positioned overlay with the :after attribute. You can adjust the background color and borders as you see fit. Save this answer.
Radio buttons allow only one choice within a group of buttons. Each radio button within a group should have the same name. You can create more than one group of radio buttons by using different names.
I modified the plugin to meet your needs. It now can display custom images for each radio button depending on its state. Comment if you find any bugs :)
Demo: http://jsfiddle.net/mctcs/
Use (for radio boxes called gender
, with option values male
and female
):
$("input[name='gender']").imageTick({
tick_image_path: {
male: "images/gender/male_checked.jpg",
female: "images/gender/female_checked.jpg"
//"default": "images/gender/default_checked.jpg" //optional default can be used
},
no_tick_image_path: {
male: "images/gender/male_unchecked.jpg",
female: "images/gender/female_unchecked.jpg"
//"default": "images/gender/default_unchecked.jpg" //optional default can be used
},
image_tick_class: "gender",
});
The plugin source:
/******************************************
Image Tick v1.0 for jQuery
==========================================
Provides an unobtrusive approach to image
based checkboxes and radio buttons
------------------------------------------
by Jordan Boesch
www.boedesign.com
June 8, 2008
Modified June 25, 2010:
- Radio buttons can have individual images
by Simen Echholt
http://stackoverflow.com/questions/3114166/#3114911
******************************************/
(function($){
$.fn.imageTick = function(options) {
var defaults = {
tick_image_path: "images/radio.gif",
no_tick_image_path: "no_images/radio.gif",
image_tick_class: "ticks_" + Math.floor(Math.random()),
hide_radios_checkboxes: false
};
var opt = $.extend(defaults, options);
return this.each(function(){
var obj = $(this);
var type = obj.attr('type'); // radio or checkbox
var tick_image_path = typeof opt.tick_image_path == "object" ?
opt.tick_image_path[this.value] || opt.tick_image_path["default"] :
opt.tick_image_path;
var no_tick_image_path = function(element_id) {
var element = document.getElementById(element_id) || { value: "default" };
return typeof opt.no_tick_image_path == "object" ?
opt.no_tick_image_path[element.value] || opt.no_tick_image_path["default"]:
opt.no_tick_image_path;
}
// hide them and store an image background
var id = obj.attr('id');
var imgHTML = '<img src="' + no_tick_image_path(id) + '" alt="no_tick" class="' + opt.image_tick_class + '" id="tick_img_' + id + '" />';
obj.before(imgHTML);
if(!opt.hide_radios_checkboxes){
obj.css('display','none');
}
// if something has a checked state when the page was loaded
if(obj.attr('checked')){
$("#tick_img_" + id).attr('src', tick_image_path);
}
// if we're deadling with radio buttons
if(type == 'radio'){
// if we click on the image
$("#tick_img_"+id).click(function(){
$("." + opt.image_tick_class).each(function() {
var r = this.id.split("_");
var radio_id = r.splice(2,r.length-2).join("_");
$(this).attr('src', no_tick_image_path(radio_id))
});
$("#" + id).trigger("click");
$(this).attr('src', tick_image_path);
});
// if we click on the label
$("label[for='" + id + "']").click(function(){
$("." + opt.image_tick_class).each(function() {
var r = this.id.split("_");
var radio_id = r.splice(2,r.length-2).join("_");
$(this).attr('src', no_tick_image_path(radio_id))
});
$("#" + id).trigger("click");
$("#tick_img_" + id).attr('src', tick_image_path);
});
}
// if we're deadling with checkboxes
else if(type == 'checkbox'){
$("#tick_img_" + id).click(function(){
$("#" + id).trigger("click");
if($(this).attr('src') == no_tick_image_path(id)){
$(this).attr('src', tick_image_path);
}
else {
$(this).attr('src', no_tick_image_path(id));
}
});
// if we click on the label
$("label[for='" + id + "']").click(function(){
if($("#tick_img_" + id).attr('src') == no_tick_image_path(id)){
$("#tick_img_" + id).attr('src', tick_image_path);
}
else {
$("#tick_img_" + id).attr('src', no_tick_image_path(id));
}
});
}
});
}
})(jQuery);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With