почему мой JS-скрипт не form.submit () в Rails4?

0

В контексте шоу Inspections # я использую will_paginate для итерации по набору элементов, и его счет будет POSTED в db, когда клиент нажимает ссылку на другую страницу в списке_страницы списка_страницы. Поскольку will_paginate не работает с POST, я использовал ответ в этом сообщении, который я использовал в фрагменте здесь:

http://jsfiddle.net/sam452/pWrg3/4/

HTML

 <div class="pagination"><a class="previous_page" rel="prev start" href="/inspections/1?page=1">&#8592; Previous</a> <a rel="prev start" href="/inspections/1?page=1">1</a> <em class="current">2</em> <a rel="next" href="/inspections/1?page=3">3</a> <a href="/inspections/1?page=4">4</a> <a href="/inspections/1?page=5">5</a> <a href="/inspections/1?page=6">6</a> <a class="next_page" rel="next" href="/inspections/1?page=3">Next &#8594;</a></div>

 <div class="item_enclosure row">
    <div class="item_text small-9 large-9 columns">
        Change Fund/Petty Cash (810) reviewed daily?
    </div>
    <div class="small-3 columns">
        <div class="item_scoring">
            <div class="row">
                <div class="item_score item-8 small-6 columns">
                    <form accept-charset="UTF-8" action="/scores" class="new_score" data-remote="true" id="new_score" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
                    <input id="score_score_item" name="score[score_item]" placeholder="5" type="text" />
                    <input id="score_item_id" name="score[item_id]" type="hidden" value="8" />
                    <input id="score_inspection_id" name="score[inspection_id]" type="hidden" value="1" />
                    <input name="commit" type="submit" value="Edit inspection" />

            </div>
        </div>
    </div>
</div>

приложение/активы/JavaScripts/inspection.js

 $(".pagination a").click(function(e){e.preventDefault();
var tp_id = $(this).attr('href').split('?page=')[1]; 
$('form').append("<input type='hidden' name='page' value='"+ tp_id +"'>");
$('form').submit();
 });

приложение/просмотров /inspection.js.erb

 $('body').append('<%= @score.score_item %>')

приложение/просмотров/проверки /show.html.erb

 <%= will_paginate @items %>
 <% for item in @items %>
   .. other html suppressed
       <div class="item_score item-<%= item.id %> small-6 columns">
                    <%= form_for @score, remote: true do |f| %>
                    <%= f.text_field :score_item, placeholder: item.high_score %>
                    <%= f.hidden_field :item_id, value: item.id %>
                    <%= f.hidden_field :inspection_id, value: params[:id] %>
                    <%= f.submit submit_text %>
                    <% end %>
       </div>

   .. other html suppressed
 <% end %>

inspection.rb

 class Inspection < ActiveRecord::Base
   has_many :scores
   accepts_nested_attributes_for :scores
 end

score.rb

 class Score < ActiveRecord::Base
belongs_to :inspection
 end

scores_controller.rb

 class ScoresController < ApplicationController
   def create
    @score = Score.new(score_params)
            @inspection = Inspection.find(@score.inspection_id)
    if @score.save
        binding.pry
        respond_to do |format|
        format.html {redirect_to inspection_path(@inspection, page: params[:page]), notice: "Scorex was accepted."}
        format.js
        end

           else
        render action: 'new'
    end
end

   private
   def score_params
     params.require(:score).permit(:score_item, :inspection_id, :item_id, :page)
   end
 end

inspection_controller.rb

 class InspectionsController < ApplicationController
     def show
     #binding.pry   
     @inspection = Inspection.find(params[:id])
     @items = Item.where(:id ==   @survey.id).order("sub_category").page(params[:page]).per_page(1)
    @score = @inspection.scores.build
    end
 end

Поэтому для каждой строки JS каждый работает. Первое дает правильно. Я проверил это, заменив код для Alert(), чтобы гарантировать, что preventDefault работает. Вторая дает правильное значение для переменной, как указано console.log(). Третий работает, потому что в консоли я вижу код в браузере. Действия отправки и перенаправление происходят, за исключением того, что: параметры страницы не передаются.

Щелчок по ссылке will_paginate выполняет параметр GET справа: page. В журналах сервера нет действия POST. Как будто preventDefault() не распознается. С этой целью, когда я смотрю в источниках Chrome и нажимаю "Проверка", я вижу результат: "1? Page = 2". Возможно, Chrome не нравится мой JS? Я уверен, что это какая-то глупость, которую я забыл.

Я попытался удалить вызов ajax из form_for, но не отличается. Сообщение работает, но параметр страницы не найден, поэтому по умолчанию он равен 1.

Почему не возникает форма submit() и почему не передаются параметры страницы? спасибо, sam

  • 0
    jsfiddle.net/pWrg3/10 Мой пост: utf8: ✓ оценка [score_item]: оценка [item_id]: 8 оценка [inspe_id]: 1 страница: 4
  • 0
    Да, пожалуйста, превратитесь в ответ, и я с радостью приму! Спасибо.
Теги:
ruby-on-rails-4

1 ответ

1
Лучший ответ

Моя скрипка

В вашем jsfiddle у вас было нежелательное пространство: D

< input

Не было включено jquery и $ (function() {при начале было бы неплохо;)

Также добавлено

$('form#new_score').append(
$('form#new_score').submit(

Мой пост: utf8: ✓ score [score_item]: score [item_id]: 8 баллов [inspect_id]: 1 страница: 4

Ещё вопросы

Сообщество Overcoder
Наверх
Меню