【问题标题】:Redefine border of image no longer selected重新定义图像的边框不再被选中
【发布时间】:2019-08-22 17:38:42
【问题描述】:

我正在创建一个表单,其中一些元素是图像。将鼠标悬停在上方时,有一条 CSS 规则会在所选图像周围创建粗边框。选择图像时也是如此;它留下了一个粗边框。

但我面临的问题是,当单击图像时,虽然它会在正确图像周围留下粗边框,但它不会重新定义其他先前选择的图像周围的边框。 (通过重新定义,我的意思是让它变得半透明以阻止图像移动)。

这是一个 JSFiddle:http://jsfiddle.net/bewWF/ 或者您可能会看到下面的代码。

HTML

<div class="grid_12 alpha" id="selection">

    <input type="hidden" id="SelSunlight" name="SelSunlight" value=""/>

    <div class="grid_2 omega" style="margin-left: 8px">
        <div align="center"><img src="images/details/any.png"/ id="AnySun" name="AnySun" onClick="SelectSunlight('AnySun')"/></div>
        <p id="image-text">Any</p>
    </div>

    <div class="grid_2 alpha omega">
        <div align="center"><img src="images/details/sunlight/full_light.png" id="FullSun" name="FullSun" onClick="SelectSunlight('FullSun')"/></div>
        <p id="image-text">Full Sun</p>
    </div>

    <div class="grid_2 alpha omega">
        <div align="center"><img src="images/details/sunlight/part_shade.png" id="PartShade" name="PartShade" onClick="SelectSunlight('PartShade')"/></div>
        <p id="image-text">Part Shade</p>
    </div>

    <div class="grid_2 alpha">
        <div align="center"><img src="images/details/sunlight/full_shade.png" id="FullShade" name="FullShade" onClick="SelectSunlight('FullShade')"/></div>
        <p id="image-text">Full Shade</p>
    </div>

</div>

JavaScript

function SelectSunlight(item) {
    $.each(['#AnySun','#FullSun','#PartShade','#FullShade'], function() {
        $(this).css('border', "3px solid #f5f5f5");

        $(this).hover( function() {
            $(this).addClass('hover');
        }, function() {
            $(this).removeClass('hover');
        });
    });

    $('#'+item).css('border', "3px solid #a6be39");
    $('#SelSunlight').val(item);
}

.hover 定义为#selection .hover {border: 3px solid #a6be39}

我已经解决了一个又一个问题,在花费了很长时间之后,我终于对这个问题没有想法了。我的头脑认为它应该工作,但显然它没有!

需要做什么:

1) 用户选择一张图片 2) 选择图像后,该图像的边框仍然很粗 3)所有其他图像必须保持悬停效果,边框分别变粗和变细 4) 如果随后选择了另一张图片,则重置步骤 2 中的边框,新图片采用粗边框

这张图片可能会更清楚:http://i48.tinypic.com/ei4f9t.png

【问题讨论】:

  • 我更新了我的帖子。如果我缺少您的任何要求,请告诉我。

标签: jquery html border


【解决方案1】:

我优化了你所有的代码。由于您使用的是 CSS :hover,因此您不需要为悬停边框使用 jQuery。我在每个图像中添加了class="sun",这样您就不需要使用$(".sun") 而不是较慢的.each。我使用 jQuery 的 .click 替换 onclick.prop 以获取单击的 .sun 的名称属性。我为演示更改了选定的 img 边框红色。

HTML:

<div id="selection">
    <input type="hidden" id="SelSunlight" name="SelSunlight" value="" />
    <img class="sun" src="http://jonline.me.uk/fbedder/images/details/any.png" id="AnySun" name="AnySun" />
        <p id="image-text">Any</p>
    <img class="sun" src="http://jonline.me.uk/fbedder/images/details/sunlight/full_light.png" id="FullSun" name="FullSun" />
        <p id="image-text">Full Sun</p>
    <img class="sun" src="http://jonline.me.uk/fbedder/images/details/sunlight/part_shade.png" id="PartShade" name="PartShade" />
        <p id="image-text">Part Shade</p>
    <img class="sun" src="http://jonline.me.uk/fbedder/images/details/sunlight/full_shade.png" id="FullShade" name="FullShade" />
        <p id="image-text">Full Shade</p>
</div>


CSS:

.sun {border: 3px solid #f5f5f5}
.sun:hover {border: 3px solid #a6be39}
.selected {border: 3px solid red !important}


jQuery:

$(document).ready(function(){
    $(".sun").click(function(){
        $(".sun").removeClass("selected");
        $(this).addClass("selected");
        var item = $(this).prop("name");
        $('#SelSunlight').val(item);
    });
});


JSFiddle:http://jsfiddle.net/bewWF/2/

【讨论】:

  • 感谢您的回复和时间!我现在去看看
【解决方案2】:

看起来你可以简化很多:

$(function() {
    $('#AnySun, #FullSun, #PartShade, #FullShade').on('click', function() {
        $(this).addClass('hover').siblings('img').removeClass('hover');
        $('#SelSunlight').val(this.id);
    });
});

FIDDLE

【讨论】:

  • 这不会改变#SelSunlight的值
  • @Mooseman - 这太微不足道了,我什至没想过要添加它,但感谢您的反对。
  • @adeneo 不确定我是不是傻,但gyazo.com/575be004cb0234c8cd671f336feb2873 不起作用。我正在使用以下 jQuery v:gyazo.com/91f0f2c91fc5ab25d710290f9d918a60 - 有什么想法吗?
  • @JYoung - 您可能需要将代码包装在 DOM 就绪函数中。也添加了。
  • @adeneo I tried that last night after my latest comment but it causes the border to stick when another image is selected.此处的实时示例:jonline.me.uk/fbedder/details.php - 忽略错误,我删除了会话检查,因此您无需登录。我已经尝试将函数定位在头部,在定义图像之前,在定义图像之后但没有任何工作。
【解决方案3】:

您可以在选择当前边框之前清除所有边框。这就是你要找的吗?

function SelectSunlight(item) {
    $("img").css('border','3px solid #f5f5f5'); //resets border of all images
    $.each(['#AnySun', '#FullSun', '#PartShade', '#FullShade'], function () {
        $(this).css('border', "3px solid #f5f5f5"); 

        $(this).hover(function () {
            $(this).addClass('hover');
        }, function () {
            $(this).removeClass('hover');
        });
    });

    $('#' + item).css('border', "3px solid #a6be39");
    $('#SelSunlight').val(item);
}

演示: http://jsfiddle.net/bewWF/1/

【讨论】:

  • 不是我想要的,我更新了我的主要帖子以使其更清晰!不过,感谢您的宝贵时间。
猜你喜欢
  • 2012-08-31
  • 2013-04-11
  • 2012-11-12
  • 1970-01-01
  • 2012-06-23
  • 2021-10-08
  • 2012-03-16
  • 2013-07-24
  • 1970-01-01
相关资源
最近更新 更多