初めての javascript

take_tk2008-10-30

初めての javascript

<%#### 準備 ####%>

<%
  # <td><span id="c0101"><%= @gian.get(            "無記名","出欠"  ,"人数") % ></span></td>
  # <td><%= f.text_field @gian.names_to_field_name("無記名","賛成"  ,"人数"),
  #     :size=>6, :id=>"c0102", :onfocus =>"calc()", :onkeyup=>"calc()" % ></td>
  # <td><%= f.text_field @gian.names_to_field_name("無記名","反対"  ,"人数"), ・・
  # <td><%= f.text_field @gian.names_to_field_name("無記名","棄権"  ,"人数"), ・・
  # <td><span id="c0105"><%= @gian.get(            "無記名","未集計","人数")% ></span></td>
  # 項目表示のHTML文字列/無記名投票のリアルタイム計算用のタグを返す。
def content(syu,san,bas,f,narabi)
  mukimei = @gian.syukketu_name_num("無記名")
  case syu
  when mukimei
    field_name = @gian.nums_to_field_name(syu,san,bas)
    id = field_name+"#{narabi}"
    case san
    when @gian.sanpi_name_num("合計"),@gian.sanpi_name_num("未集計")
      %!<span id="#{id}">#{@gian.get(syu,san,bas)}</span>!
    else
      f.text_field(field_name, :id=>id, :size=>6,
          :onfocus =>"calc(#{narabi})", :onkeyup=>"calc(#{narabi})" )
    end
  else
    @syuukei.get(syu,san,bas)
  end
end
%>

<script type="text/javascript">
  // 無記名投票のリアルタイム計算を行う。
  // 同じデータが「縦並び」「横並び」の2ヶ所に表示されているので、コピーする。
function calc(narabi) {
  if( narabi == 1 ){
    var f0001 = document.getElementById('f0001').innerText;
    var f0101 = document.getElementById('f0101').value;  // name="gian[f010]"
    var f0201 = document.getElementById('f0201').value;
    var f0301 = document.getElementById('f0301').value;
    var f0401 = parseInt(f0001) - parseInt(f0101) - parseInt(f0201) - parseInt(f0301);
    document.getElementById('f0401').innerHTML = f0401;
      //
    var f0011 = document.getElementById('f0011').innerText;
    var f0111 = document.getElementById('f0111').value;  // name="gian[f010]"
    var f0211 = document.getElementById('f0211').value;
    var f0311 = document.getElementById('f0311').value;
    var f0411 = parseInt(f0011) - parseInt(f0111) - parseInt(f0211) - parseInt(f0311);
    document.getElementById('f0411').innerHTML = f0411;
      //
    document.getElementById('f0002').innerHTML = f0001;
    document.getElementById('f0102').value     = f0101;
    document.getElementById('f0202').value     = f0201;
    document.getElementById('f0302').value     = f0301;
    document.getElementById('f0402').innerHTML = f0401;
    document.getElementById('f0012').innerHTML = f0011;
    document.getElementById('f0112').value     = f0111;
    document.getElementById('f0212').value     = f0211;
    document.getElementById('f0312').value     = f0311;
    document.getElementById('f0412').innerHTML = f0411;
  } else {
    var f0002 = document.getElementById('f0002').innerText;
    var f0102 = document.getElementById('f0102').value;  // name="gian[f010]"
    var f0202 = document.getElementById('f0202').value;
    var f0302 = document.getElementById('f0302').value;
    var f0402 = parseInt(f0002) - parseInt(f0102) - parseInt(f0202) - parseInt(f0302);
    document.getElementById('f0402').innerHTML = f0402;
      //
    var f0012 = document.getElementById('f0012').innerText;
    var f0112 = document.getElementById('f0112').value;  // name="gian[f010]"
    var f0212 = document.getElementById('f0212').value;
    var f0312 = document.getElementById('f0312').value;
    var f0412 = parseInt(f0012) - parseInt(f0112) - parseInt(f0212) - parseInt(f0312);
    document.getElementById('f0412').innerHTML = f0412;
      //
    document.getElementById('f0001').innerHTML = f0002;
    document.getElementById('f0101').value     = f0102;
    document.getElementById('f0201').value     = f0202;
    document.getElementById('f0301').value     = f0302;
    document.getElementById('f0401').innerHTML = f0402;
    document.getElementById('f0011').innerHTML = f0012;
    document.getElementById('f0111').value     = f0112;
    document.getElementById('f0211').value     = f0212;
    document.getElementById('f0311').value     = f0312;
    document.getElementById('f0411').innerHTML = f0412;
  }
}
</script>

<%#### 描画 ####%>

<% form_for @gian do |f| %>
  <% if %w(両方 縦).include?( sanpi_narabi ) %>
    <% @syuukei.base_titles.size.times do |bas| %>
      <% next unless( base==@syuukei.base_titles[bas] || base == "両方") %>

<p><b><%=h @syuukei.base_titles[bas] %>ベース(賛否縦並び)</b></p>
<table>
  <tr bgcolor="#<%= ((line_color_sw ^= true) ? 'f8b0f8' : 'e0f8f8') %>"  >
    <th>項目</th>

      <%## 項目 現実出席(無記名) 現実出席(記名) 書面出席 代理出席
               合計(無記名) 合計(記名) 欠席 総数(無記名) 総数(記名) ##%>
      <% @syuukei.syukketu_titles.each_with_index do |title,syu| %>
        <% next if skip_syu(syu,kimei,bosuu) %>

    <th><%= syu_title(syu) %></th>

      <% end  %>

  </tr>

      <%## 項目 合計(出欠) 賛成 反対 棄権 未集計 ##%>
      <% @syuukei.sanpi_titles.size.times do |san| %>
        <% next if skip_san(san,saiketu) %>

  <tr bgcolor="#<%= ((line_color_sw ^= true) ? 'f8b0f8' : 'e0f8f8') %>"  >
    <td><%= @syuukei.sanpi_titles[san] %></td>

        <% @syuukei.syukketu_titles.size.times do |syu| %>
          <% next if skip_syu(syu,kimei,bosuu) %>

    <td><%= content(syu,san,bas,f,1) %></td>  ← ★

        <% end  %>

  </tr>

      <% end %>

</table>

    <% end %>
  <% end # sanpi_narabi %>

<%####%>

  <% if %w(両方 横).include? sanpi_narabi %>
    <% @syuukei.base_titles.size.times do |bas| %>
      <% next unless( base==@syuukei.base_titles[bas] || base == "両方") %>

<p>
  <b><%=h @syuukei.base_titles[bas] %>ベース(賛否横並び)</b>
</p>
<table>
  <tr bgcolor="#<%= ((line_color_sw ^= true) ? 'f8b0f8' : 'e0f8f8') %>"  >
    <th>項目</th>

      <%## 項目 合計(出欠) 賛成 反対 棄権 未集計 ##%>
      <% @syuukei.sanpi_titles.each_with_index do |title,san| %>
        <% next if skip_san(san,saiketu) %>

    <th><%= title  %></th>

      <% end  %>

  </tr>

      <%## 項目 現実出席(無記名) 現実出席(記名) 書面出席 代理出席
               合計(無記名) 合計(記名) 欠席 総数(無記名) 総数(記名) ##%>
      <% @syuukei.syukketu_titles.size.times do |syu| %>
        <% next if skip_syu(syu,kimei,bosuu) %>

  <tr bgcolor="#<%= ((line_color_sw ^= true) ? 'f8b0f8' : 'e0f8f8') %>"  >
    <th><%= syu_title(syu) %></th>

        <% @syuukei.sanpi_titles.size.times do |san| %>
          <% next if skip_san(san,saiketu) %>

    <td><%= content(syu,san,bas,f,2) %></td>  ← ★

        <% end  %>

  </tr>

      <% end # @syuukei.syukketu_titles.size.times do |syu| %>

</table>

    <% end # @syuukei.sanpi_titles.each do |title| %>
  <% end # sanpi_narabi %>
  <% unless (kimei  == "記名") %>

<%= f.submit "無記名投票を確定" %>

  <% end # %>
<% end # form %>