Rqu形式的Jquery Raty星级评级

时间:2012-05-13 00:30:05

标签: jquery ruby-on-rails

当用户点击以获得5星评级时,DOM中的jquery会生成以下行:

<input type="hidden" name="review[answer01]" id="review_answer01" value="5">

不知何故,我的控制器没有为params [:review] [:answer01]

获取此值

在我看来,当我点击提交按钮时,根本没有发送隐藏值。表单是否不知道隐藏字段,因为它在开始时不存在?我该如何解决。

使用简单的单选按钮选择,一切正常。

顺便说一句,我手动将相同的代码行添加到我的表单中,并且工作正常。我把

<%= f.hidden_field :answer01, :value => 5 %>

产生了html:

<input id="review_answer01" name="review[answer01]" type="hidden" value="5">

我只是不明白......

编辑:

这是js源这里是js:https://github.com/wbotelhos/raty/blob/master/js/jquery.raty.js

输入标签由第62行生成,我稍微修改了一个ID(我不确定这是不是问题)。

我的第62行:self.score = $('<input />', { type: 'hidden', name: self.opt.scoreName, id: self.opt.scoreId}).appendTo(self);

我还将scoreID : 'blank'添加到$.fn.raty.defaults {}以提供设置ID的选项。

现在,在我看来,我有:

<table class='table'>
  <tbody>

  <%= simple_form_for @review, :html => { :multipart => true } do |f| %>

    <td style='width:115px; padding-top:10px;'><div id="s1"></td>
    <td><h3 style = 'padding-bottom:3px;'><%= @questions[0] %></h3></td>

    [...] (repeated for other questions)

  </tbody>
</table>

  <div style='margin-left:80px; margin-top:20px; margin-bottom:200px;' id='subbut'>
    <%= f.button :submit, "Submit Review", :class=>'btn btn-large' %>
  </div>
  <% end %>

<script>
$('#s1').raty({
    scoreName : 'review[answer01]',
    scoreId : 'review_answer01'
});
</script>

我在选择5/5星的firebug DOM分析中看到的内容:

<td style="width:115px; padding-top:10px;">
<div id="s1" style="cursor: pointer; width: 100px; ">
  <img src="/assets/star-on.png" alt="1" title="bad">&nbsp;
  <img src="/assets/star-on.png" alt="2" title="poor">&nbsp;
  <img src="/assets/star-on.png" alt="3" title="regular">&nbsp;
  <img src="/assets/star-on.png" alt="4" title="good">&nbsp;
  <img src="/assets/star-on.png" alt="5" title="gorgeous">
  <input type="hidden" name="review[answer01]" id="review_answer01" value="5">
</div>
</td>

表格标签:

<form accept-charset="UTF-8" action="/reviews" class="simple_form new_review" enctype="multipart/form-data" id="new_review" method="post" novalidate="novalidate"></form>

1 个答案:

答案 0 :(得分:1)

你的HTML结构不对......看:

<table class='table'>
  <tbody>

  <%= simple_form_for @review, :html => { :multipart => true } do |f| %>

    <td style='width:115px; padding-top:10px;'><div id="s1"></td>
    <td><h3 style = 'padding-bottom:3px;'><%= @questions[0] %></h3></td>

    [...] (repeated for other questions)

  </tbody>
</table>

  <div style='margin-left:80px; margin-top:20px; margin-bottom:200px;' id='subbut'>
    <%= f.button :submit, "Submit Review", :class=>'btn btn-large' %>
  </div>
  <% end %>

form在表格内部开始,但在外面结束。这将导致HTML被解析为不包括所有input和一些一般的怪异,因为浏览器无法弄清楚你的意思。

顺便说一下,使用HAML可以解决这类问题,但对每个人来说都是如此:)