0

トランザクション用のフォームがあり、いくつかのテキストと選択フィールドがあります。date私が使用するテキストフィールドがありますjQuery.ui.datepicker。テキスト フィールドを非表示にし、代わりにボタン (「今日」、「昨日」、および「カレンダー アイコン」ボタン) を使用しています。「昨日」と「今日」ボタンは非表示フィールドの値を変更しますが、submitアクションを呼び出して、他のフィールドが入力された場合、またはステータス 500 の内部サーバー エラーが発生した場合にトランザクションを作成します。ボタンcreateをクリックするだけでアクションを呼び出す必要がありsubmitます。

これはの作成アクションですtransaction_controller.rb

def create
    if @transaction.save
      respond_to do |format|
        format.html { redirect_to root_url }
        format.js
      end
    else
      render 'pages/index'
    end
  end

これはトランザクション アクションtransaction_form用です。new

<%= form_for @transaction, remote: true do |f| %>
    <%= render 'shared/error_messages', object: f.object %>
    <div class="form-row">
      <%= f.text_field :name, class: 'input-medium', 'placeholder' => 'Name' %>
      <%= f.text_field :amount, class: 'input-small', 'placeholder' => '$' %>
      <%= f.submit 'Add', class: 'btn btn-primary' %>
    </div>

    <%= f.collection_select :category_id, current_user.categories.all, :id, :name, {}, class: 'input-medium' %>
    <%= f.collection_select :account_id, current_user.accounts.all, :id, :name, {}, class: 'input-small' %>
    <%= f.text_field :date, 'value' => Date.today %>

    <div class="btn-group" id="transaction_date_group">
      <button class="btn active" id="transaction_today">Today</button>
      <button class="btn" id="transaction_yesterday">Yesterday</button>
      <button class="btn dropdown-toggle" data-toggle="dropdown" id="transaction_date_dropdown">
        <i class="icon-calendar"></i>
      </button>
    </div>

<% end %>

これはcreate.js.erb

$('#transactions_table').prepend('<%= j render(@transaction) %>');
$('#new_transaction').each(function () {
    this.reset();
});
<% if @transaction.category_id == current_user.categories.first.id && current_user.categories.first.balance == @transaction.amount %>
$('#categories_table').append('<%= j render(@category) %>');
<% end %>
$('#edit_category_<%= @transaction.category_id %>').replaceWith('<%= j render(@category) %>');
$('#edit_category_<%= @transaction.category_id %>').hide().fadeIn('slow');
$('#edit_account_<%= @transaction.account_id %>').replaceWith('<%= j render(@account) %>');
$('#edit_account_<%= @transaction.account_id %>').hide().fadeIn('slow');
$('#accounts_total').replaceWith('<td id="accounts_total"><%= current_user.accounts.sum(:balance) %></td>');
$('#accounts_total').hide().fadeIn('slow');

そして、これは、クリック中にボタンのクラスを表示および変更するtransaction.js.coffeeために使用されます。datepicker

jQuery ->
  $("#transaction_date").datepicker dateFormat: "yy-mm-dd"

  $("#transaction_date_dropdown").click ->
    if $("#transaction_date_group").hasClass 'open'
      $("#transaction_date").datepicker 'hide'
    else
      $("#transaction_date").datepicker 'show'
      $("#transaction_today").removeClass 'active'
      $("#transaction_yesterday").removeClass 'active'

  $("#transaction_yesterday").click ->
    $("#transaction_today").removeClass 'active'
    $("#transaction_yesterday").addClass 'active'
    yesterday = moment().add('days', -1).format 'YYYY-MM-DD'
    $("#transaction_date").val yesterday

  $("#transaction_today").click ->
    $("#transaction_yesterday").removeClass 'active'
    $("#transaction_today").addClass 'active'
    today = moment().format 'YYYY-MM-DD'
    $("#transaction_date").val today

ありがとう!

4

2 に答える 2

0

すべてのクリック イベント コールバックに return false を追加

$("#transaction_yesterday").click ->
  ..
  $("#transaction_date").val yesterday
  return false
于 2013-05-15T08:26:27.553 に答える
0

細かい仕様から:

button属性が指定されていない要素は、属性が に設定されている要素とtype同じものを表します。buttontype"submit"

したがって、この:

<button class="btn active" id="transaction_today">Today</button>

実際には、送信ボタンであり、送信ボタンはフォームを送信します。<button>フォームを送信したくない場合は、type="button"ボタンを使用してその旨を伝えます。

<button type="button" class="btn active" id="transaction_today">Today</button>

一部の古い IE は、仕様に記載されている内容にもかかわらず (またはそれにもかかわらず) にデフォルト設定されるtype="button"ため、.type<button>

于 2013-05-15T16:58:21.057 に答える