私はTwitter-boostrapを使用していますが、フォームで これらのラジオボタン を使用したいと思います。問題は、これらのボタンのいずれかをクリックすると、フォームがすぐに送信されることです。これを避ける方法は?ラジオボタンのようなデフォルトのボタンを使いたいだけです。
から:
<%= form_for @product do |f| %>
<div class="control-group">
<%= f.label :type, :class => 'control-label' %>
<div class="controls">
<div class="btn-group" data-toggle="buttons-radio">
<button class="btn">Button_1</button>
<button class="btn">Button_2</button>
</div>
</div>
</div>
<div class="form-actions">
<%= f.submit nil, :class => 'btn btn-primary' %>
<%= link_to 'Cancel', products_path, :class => 'btn' %>
</div>
<% end %>
javascript:
// application.js
$('.tabs').button();
罰金 HTML5仕様 から:
buttontype属性が指定されていない要素は、type属性が"submit"に設定されているボタン要素と同じものを表します。
<button type="submit">
は、単純な <button type="button">
プッシュボタン のように動作するのではなく、フォームを送信します。
HTML4仕様 は同じことを言っています:
type = submit | button | reset[CI]
この属性はボタンのタイプを宣言します。可能な値:
submit
:送信ボタンを作成します。これがデフォルト値です。reset
:リセットボタンを作成します。button
:プッシュボタンを作成します。
あなたの<button>
要素:
<button class="btn">Button_1</button>
<button class="btn">Button_2</button>
以下と同じです(準拠ブラウザ):
<button type="submit" class="btn">Button_1</button>
<button type="submit" class="btn">Button_2</button>
これらのボタンのいずれかを押すたびに、フォームを送信します。
解決策は、プレーンボタンを使用することです。
<button type="button" class="btn">Button_1</button>
<button type="button" class="btn">Button_2</button>
IEのデフォルトはtype="button"
にデフォルト設定されています。<button>
を使用するときは、期待どおりの動作が得られることを確認するために、常にtype
属性を指定する必要があります。
これにはpreventDefault()
を使用できます
$('.btn').onClick(function(e){
e.preventDefault();
});
または、次のコードでhtmlを更新できます(
type="button"
)ボタンタグ
<%= form_for @product do |f| %>
<div class="control-group">
<%= f.label :type, :class => 'control-label' %>
<div class="controls">
<div class="btn-group" data-toggle="buttons-radio">
<button class="btn" type="button">Button_1</button>
<button class="btn" type="button">Button_2</button>
</div>
</div>
</div>
<div class="form-actions">
<%= f.submit nil, :class => 'btn btn-primary' %>
<%= link_to 'Cancel', products_path, :class => 'btn' %>
</div>
<% end %>
「ボタン」のオプションとしてtype
を指定することにより、Railsフォームヘルパーを使用して直接これを行うことができます。
<%= form_for @product do |f| %>
<div class="control-group">
<%= f.label :type, :class => 'control-label' %>
<div class="controls">
<div class="btn-group" data-toggle="buttons-radio">
<%= f.button "Button_1", type: "button", class: "btn" %>
<%= f.button "Button_2", type: "button", class: "btn" %>
</div>
</div>
</div>
<div class="form-actions">
<%= f.submit nil, :class => 'btn btn-primary' %>
<%= link_to 'Cancel', products_path, :class => 'btn' %>
</div>
<% end %>