Функции тегов Ruby on rails. Почему случай radio_button_tag.id не совпадает с label.for? - PullRequest
3 голосов
/ 28 сентября 2011

При регистрации на 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 на самом деле с открытым исходным кодом, поэтому мы можем прочитать term.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 %>

Я новичок в рельсах, но я не вижу там ничего, что могло бы поменять id тега переключателя. Более того, даже когда я смотрю на источник radio_button_tag , sanitize_to_id Я не вижу, откуда это исходит.

Кто-нибудь понимает, что это вызывает?

Редактировать Заменены label на radio в моем описании согласно ответу от

1 Ответ

2 голосов
/ 28 сентября 2011

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}", ... }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...