ruby-on-rails - Ruby on Rails 标签函数。为什么radio_button_tag.id 的大小写与label.for 不匹配?

标签 ruby-on-rails ruby erb case-sensitive

在注册 openstreetmap 时,在条款页面上,我注意到单击标签并没有选中与其关联的单选按钮。这是 html:

<!-- legale is GB --> 
<form action="/user/terms" method="post"> 
  <p> 
    Please select your country of residence:

    <input id="legale_fr" name="legale"
onchange="Element.update(&quot;contributorTerms&quot;, &quot;&lt;img alt=\&quot;Searching\&quot; src=\&quot;/images/searching.gif?1313181320\&quot; /&gt;&quot;);; new Ajax.Request('/user/terms?legale=FR', {asynchronous:true, evalScripts:true})" 
                                            type="radio" value="FR" /> 
    <label for="legale_FR">France</label>

    <input id="legale_it" name="legale" ... type="radio" value="IT" /> 
    <label for="legale_IT">Italy</label> 

    <input checked="checked"
           id="legale_gb" name="legale" ... type="radio" value="GB" /> 
    <label for="legale_GB">Rest of the world</label> 
  </p> 
</form> 

如您所见,复选框 id="legale_gb" 与标签 for="legale_GB" 不匹配。

现在 openstreetmap 的网站实际上是开源的,所以我们可以阅读 terms.html.erb :

<!-- legale is <%= @legale %> -->
<% form_tag :action => 'terms' do %>
  <p>
    <%= t 'user.terms.legale_select' %>
    <% [['france', 'FR'], ['italy', 'IT'], ['rest_of_world', 'GB']].each do |name,legale| %>
      <%=
        radio_button_tag 'legale', legale, @legale == legale,
          :onchange => remote_function(
            :before => update_page do |page|
              page.replace_html 'contributorTerms', image_tag('searching.gif')
            end,
            :url => {:legale => legale}
          )
      %>
      <%= label_tag "legale_#{legale}", t('user.terms.legale_names.' + name) %>
    <% end %>
  </p>
<% end %>

我是 Rails 新手,但我看不到任何将单选按钮标签的 id 小写的内容。更重要的是,即使我查看 radio_button_tag 的来源, sanitize_to_id我看不出这是从哪里来的。

有人知道是什么原因造成的吗?

编辑 根据

的回答,将我的描述中的 label 换成 radio

最佳答案

2 件事:

  1. 错误的标签,违规者是 radio_button_tag(它在标签中按预期设置了上限)。

  2. 您似乎链接到了错误的 Rails。根据这个项目的environment.rb ,它使用的是 Rails 2.3.14。如果你看radio_button_tag对于该版本,您会看到罪魁祸首。

    # our pretty tag value is downcased on line 318
    pretty_tag_value = value.to_s.gsub(/\s/, "_").gsub(/(?!-)\W/, "").downcase
    
    # although the pretty name is not, oddly
    pretty_name = name.to_s.gsub(/\[/, "_").gsub(/\]/, "")
    
    # then the two are combined into the HTML id
    html_options = { ..., "id" => "#{pretty_name}_#{pretty_tag_value}", ... }
    

关于ruby-on-rails - Ruby on Rails 标签函数。为什么radio_button_tag.id 的大小写与label.for 不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7576174/

相关文章:

ruby-on-rails - 为每个键值对打印散列 View 并换行

ruby - Sinatra 中的嵌套布局

ruby-on-rails - OmniAuth:防止同一用户的多个帐户

ruby-on-rails - 路由以匹配单数名称而不是 ':resources' 生成的复数

ruby - 我正在尝试提取 html 页面上的每个 href 链接以使用 nokogiri 和 xpath 进行评估

ruby-on-rails - 多线程环境下Redis连接(Unicorn)

ruby-on-rails - Rails 3.0 - form_for 和当前模型之外的字段

ruby-on-rails - Rails 6 不提供静态文件

ruby-on-rails - 检查记录是否刚刚在 rails 中被破坏

ruby - 如何对多个数组的对应元素求和?