0

我有一个模型调用 Post,而其他模型调用 Category,其中 1 个帖子有多个类别。

在我的新帖子形式中,我的所有类别都像按钮一样,我选择了点击类别并更改了按钮的类别。(显示按钮)

当我点击提交按钮时,如何知道用户是否点击了任何类别?没有 javascript/ajax 也可以做到这一点。

我想在保存帖子之前做这个检查

这是我的类别按钮

  .row-fluid
    .field
      = f.label :category
      - @categories.each do |cate|
        = button_tag(:class=> 'categoryButton', :type =>'button', :value=> cate.id) do
          = content_tag(:strong, cate.name)

  .row-fluid
    .actions.pull-right
      = f.submit t(:save)


:javascript
  $(document).ready(function(){
  $('.categoryButton').click(function(){
    if (this.className == "categoryButtonCambiado")
      this.className=this.className ="categoryButton"
    else
      this.className=this.className ="categoryButtonCambiado"
  });
  })

任何想法!

4

1 回答 1

1

您可能应该将其实现为复选框而不是按钮,这对于实现和用户习惯来说都会更自然。

如果您真的想使用按钮,您仍然可以添加复选框,使其隐藏(使用hidden类,因为您似乎正在使用引导程序),并使用 javascript 选中/取消选中它们:

  .row-fluid
    .field
      = f.label :category
      - @categories.each do |cate|
        = check_box_tag "categories[#{cate.id}]", '1', false, class: 'hidden'
        = button_tag(:class=> 'categoryButton', :type =>'button', :value=> cate.id) do
          = content_tag(:strong, cate.name)

  .row-fluid
    .actions.pull-right
      = f.submit t(:save)


:javascript
  $(document).ready(function(){
  $('.categoryButton').click(function(){
    if (this.className == "categoryButtonCambiado")
      this.className=this.className ="categoryButton"
      $(this).prop( 'checked', true );
    else
      this.className=this.className ="categoryButtonCambiado"
      $(this).prop( 'checked', false );
  });
  })

然后,您可以在控制器中检索检查的类别 ID:

params[:categories]

顺便说一句,这是题外话,但你真的应该考虑将你的 javascript 放在专用文件中,使用 rails 资产管道真的很容易。

于 2013-09-12T16:27:22.790 回答