【问题标题】:Rails - Use image instead of radio buttonsRails - 使用图像而不是单选按钮
【发布时间】:2020-04-28 02:29:15
【问题描述】:

我有一个表单,其中有几个单选按钮。在显示中,我在这个问题here的帮助下用图像替换了单选按钮

我的代码现在如下:

<div class="form-group col-md-5">
    <%= order_item_fields.label :frame_id do %>
        <%= order_item_fields.radio_button :frame_id, "1", :checked => true%> 
        <%= image_tag("http://placehold.it/40x60/0bf/fff&text=A", size: "80")  %>
    <% end %>
    <%= order_item_fields.label :frame_id do %>
        <%= order_item_fields.radio_button :frame_id, "2"%> 
        <%= image_tag("http://placehold.it/40x60/0bf/fff&text=B", size: "80")  %>
    <% end %>
</div>

而css是:

/* HIDE RADIO */
[type=radio] { 
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}

/* IMAGE STYLES */
[type=radio] + img {
  cursor: pointer;
}

/* CHECKED STYLES */
[type=radio]:checked + img {
  background-image: linear-gradient(0deg,rgba(255,0,149,.25),rgba(255,0,149,0));
}

这在那个 a 中运行良好。我得到的是图像而不是按钮,b.悬停在图像上我得到一个光标和 c。主要检查图像 A。

我的问题是单击图像 B 没有任何改变。如果我尝试通过检查来更改 B 的输入以使其被检查,它就可以工作。通过点击虽然它不起作用。

编辑: 检查,我发现一个问题是输入的尺寸很小,而图像的尺寸很大。通过单击我的 标签的左上角,这是我检查它的输入。但它是一个非常小的区域。单击其他任何地方都不会检查该按钮。

我在这里做错了什么?

【问题讨论】:

  • 我认为你应该用一些javascript来帮助点击图像B。换句话说:单击图像B时将图像B的单选按钮的状态设置为true。原因是当您单击图像B时(在这种情况下不是单击单选按钮),单选按钮状态不'不知道并将继续保持false
  • @k.vincent 感谢您的评论。我明白你的意思。我在上面添加的链接在没有 JS 的情况下也可以工作,下面发布的答案也可以做到这一点。这也是我想要实现的目标

标签: html css ruby-on-rails sass


【解决方案1】:

我认为问题出在 [type=radio]:checked + img 的 CSS 中

我更改了它(以及一般的 img css),为所选图像添加填充和红色背景,它似乎工作得很好。 (见下sn-p)

无论是那个还是你的 rails 代码都不会生成预期的 HTML

/* HIDE RADIO */
[type=radio] { 
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}

/* IMAGE STYLES */
[type=radio] + img {
  cursor: pointer;
  padding: 5px;
}

/* CHECKED STYLES */
[type=radio]:checked + img {
  background-color: red;
  background-image: linear-gradient(0deg,rgba(255,0,149,.25),rgba(255,0,149,0));
}
<div class="form-group col-md-5">
        <label for="imageA" name="image">
            <input checked type="radio" id="imageA" name="image"/>
            <img src="http://placehold.it/40x60/0bf/fff&text=A"/>
         </label>
        <label for="imageB" name="image">
            <input type="radio" id="imageB" name="image"/>
            <img src="http://placehold.it/40x60/0bf/fff&text=B"/>
         </label>
    </div>

【讨论】:

  • LapinLove404 非常感谢您的回答。然而,我的问题不在于所选内容的显示,而在于所选内容本身。换句话说,如果我检查代码并编辑 html 以选择 A 或 B,我会得到我想要的正确样式。问题是用光标点击图片并没有选中它。
  • 它对我很有效,或者我不明白你的问题。它可以通过在导航控制台中调用document.getElementById('imageA').checked 来验证。也许您希望 HTML 代码中的“checked”属性发生变化?
  • 我的问题只是按下图像并没有选择它(我知道是因为样式没有明显的变化并且从检查提交的表单中选择)。为了选择单选按钮,我必须在左上角图像附近的一个非常小的区域内按下。
  • @Jean-MichelGigault 检查我在上面添加的图像 :)
  • @mrateb:您是否尝试更改单选按钮的宽度和高度?同时将图像保留在它们上方。将0 用于widthheight 也可能导致问题。请问您可以创建一个 stackblitz 演示吗?在那里我们可以提供更好的帮助并编辑代码。
猜你喜欢
  • 2013-07-06
  • 2016-05-10
  • 2012-06-13
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
相关资源
最近更新 更多