用不同的图像替换单选按钮

2023-11-26

我需要创建一组 2 个单选按钮(选项:男/女)来显示图像而不是实际按钮。图像应根据选择而变化。所以应该有 4 个图像:男性(开)、男性(关)、女性(开)、女性(关)。

我在整个网站中使用 jQuery,如果可能的话,我也想使用 jQuery。

我发现了各种可以替换表单控件的插件,并且我正在使用图像勾选对于复选框替换,效果很好。但是,我不知道如何调整该插件,因此我可以在一个单选按钮组中使用不同的图像。

Thanks!


我修改了插件以满足您的需求。现在,它可以根据每个单选按钮的状态显示自定义图像。如果您发现任何错误,请评论:)

Demo: http://jsfiddle.net/mctcs/

使用(对于称为gender,带有选项值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",
});

插件来源:

/******************************************

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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用不同的图像替换单选按钮 的相关文章

  • 处理重叠 SVG 图层中的鼠标事件

    我正在使用 d3 js 构建地图可视化 我正在为美国各州和县绘制填充多边形 县的 SVG 图层位于州图层下方 状态已填充 但填充不透明度设置为 0 我认为 需要填充来捕获点击事件 我想捕获州级的点击事件 但我想捕获县级的鼠标悬停事件 但是
  • 可以在 d3.js 中使用具有固定圆圈大小的圆圈包布局吗?

    此圆形包布局示例 http bl ocks org 4063269 http bl ocks org 4063269 非常适合我正在从事的项目 但是它会调整所有圆圈相对于彼此的大小 有没有一种简单的方法来指定每个圆的固定半径 我已经搜索了源
  • 在javascript/jQuery中设置Java的数据结构

    有没有办法在javascript中像java一样创建集合数据结构 唯一集合 对于一组字符串 我只使用值为 true 的对象 var obj obj foo true obj bar true if obj foo foo in set 这基
  • JQuery、ASCX 和 webmethods 似乎不起作用

    我有一个级联下拉列表 其中 3 个 类型 类别和子类别 首先类型负载 然后选择类型 类别负载以及选择类别 子类别负载 我还有 2 个按钮 添加类别 和 添加子类别 单击这些按钮后 我调用 JQuery 模态表单来添加它们 我在代码后面使用
  • underscore.js 中断路器的重要性是什么? [复制]

    这个问题在这里已经有答案了 In 下划线 js http underscorejs org docs underscore html 有这样的代码 if iterator call context obj keys i keys i obj
  • HTML 5 视频:使用 javascript 播放多个“剪辑”

    我在 HTML 视频和 JavaScript 方面遇到问题 因此编写了一些简单的代码来演示 有一个视频包含三个 剪辑 全长五秒 显然 在现实世界中 它们要长得多 一个在 25 30 秒 一个在 55 60 秒 最后一个在 85 90 秒 我
  • 性能 - String.charAt(0) 与 /^.{1}/

    从概念上讲哪个应该更快 String charAt 0 or 1 regex String charAt 0 必须处理和应用正则表达式 速度测试资源 Paul S https stackoverflow com users 1615483
  • 仅在文件下载完成后设置 cookie。

    我有一个场景 我想告诉用户下载完成并提示关闭按钮 为此 我使用 jquery 插件来连续监视 cookie 以了解下载何时完成 我的问题是我想设置这个cookie fileDownload true and path 下载完成后立即进行 为
  • 避免 IE 中因背景图像而出现“混合内容”警告的具体规则是什么?

    这与SSL 和 CSS 背景图像导致的混合内容 https stackoverflow com questions 1548551 ssl and mixed content due to css background images但这个问
  • Google Maps API v3 在地图加载后不会禁用滚轮

    我正在网站上实现谷歌地图 一切都工作得很好 除了地图加载后我似乎无法禁用滚轮 如果我在地图加载之前将选项设置为scrollwheel false 则滚轮将被禁用 但如果我稍后尝试执行此操作 我有一个启用 禁用滚轮的复选框 以下是我在页面加载
  • 没有 jQuery 的纯 CSS 工具提示[重复]

    这个问题在这里已经有答案了 可能的重复 如何使用纯 CSS 创建 工具提示尾部 https stackoverflow com questions 5623072 how can i create a tooltip tail using
  • TinyMCE没有定义Jquery

    已经解决这个错误 2 天了 但无法让 TinyMCE 工作 我正在使用 TinyMCE 的 jquery 版本 下面是我的 HTML 代码 其中包含一个包含文本区域的表单 我使用 Google Inspect Element 在控制台选项卡
  • 使用backbonejs视图,将“onload”事件附加到图像标签的最佳方法是什么?

    我想在backbonejs 视图中为图像附加一个 onload 事件 我目前将其作为 load img function 包含在 事件 中 但它没有被触发 这样做有什么建议吗 Backbone的事件处理基于delegate https st
  • 利用源映射的堆栈跟踪

    概述 浏览器控制台中的堆栈跟踪输出与调用 Error stack 时返回的跟踪不同 控制台堆栈跟踪似乎考虑了源映射 而 Error stack 堆栈跟踪则没有 控制台输出这是输出到控制台的默认堆栈跟踪 Uncaught TypeError
  • 如何以编程方式将 CSS 定义应用到整个页面?

    我确信该信息已经存在 但我找不到它 对不起 我想使用 JavaScript 创建 CSS 规则 并将它们应用到整个页面 就像它们位于文档头部的样式元素中一样 我不想通过生成 CSS 文本来实现 我想将规则保留为可以更改的实体 JavaScr
  • 模态内的引导程序表单未正确对齐

    我尝试使用引导程序 水平形式 制作模式形式 并且该字段显示在标签下 知道如何修复它 以便输入文本框位于标签的右侧而不是标签的下方吗 div class modal hide fade div class modal header div d
  • Javascript:如何捕获使用 window.location.href = url 导航到的页面上的错误

    我正在使用 REST 服务生成一个 CSV 文件 我想提示用户下载该文件 该服务的示例如下 https localhost 8444 websvc exportCSV viewId 93282392 为了提示用户下载文件 我使用以下代码 w
  • 检查用户是否登录 Facebook

    我正在尝试使用 javascript 检查用户是否登录 Facebook 刚刚登录或未登录 与我的应用程序无关 我尝试在 FB init 之后使用以下代码 FB getLoginStatus function response alert
  • 如何强制传单更新地图?

    当我将 Leaflet 与 React 一起使用时 我遇到了问题 据我研究 问题是 Leaflet 也想控制 DOM 渲染 现在 国家将使用与后端信息相对应的特定颜色代码 范围为1 gt 100 正确着色 但是 它每分钟更新一次 更新后 国
  • jQuery 属性选择器:除了不以指定字符串结尾之外还有什么?

    我需要在jquery中选择元素 其属性值不以指定的子字符串结尾 它必须等同于 匹配除该属性中以给定子字符串结尾的所有元素 So that e a finstr 匹配 e ea finstring 等等 并且不匹配 ea somethingf

随机推荐