2016-11-02 7 views
0

ここでNoobはアマチュアのように聞こえることをお詫びします。私は電子商取引サイトをコーディングしようとしています。顧客は、サイトにアップロードされた画像からポスターを注文し、元の画像の寸法に応じて希望するポスターのサイズ(h x w)を選択します。新しい注文を作成するためのフォームがあり、フィールドの1つはポスターサイズオプションの選択フィールドです。彼らがサイズを選択すると、フォームの別のフィールドで価格を自動的に更新し、フォームを送信する前に価格を知りたいと思う。Rails:フォームの選択フィールドでそれぞれの選択肢を別のフォームフィールドに入力してください

私が試みてきた戦略は、selectフィールドの選択肢にjQuery onclickコードを追加することです。ここでは(単に簡潔にするために選択フィールドで最初の選択肢を示す)フォームのために私が持っているものです。

<%= form_for(@order) do |f| %> 
<div id="order_form"> 

<div class="field"> 
    <%= f.label(:size) %><br> 
    <%= f.select(:size, [link_to("#{@image.dimensions['width']/120} * #{@image.dimensions['height']/120}", '#', :onclick => "showPrice('#{@image.dimensions['width']/120} * #{@image.dimensions['height']/120}'); return true;"), ... ]) %> 
</div> 

<div class="field"> 
    <%= f.label(:price) %><br> 
    <%= f.text_field :price, :id => 'price' %> 
</div> 

</div> 

そして資産> JavaScriptの>私のjQueryのコードをapplication.jsです:

function showPrice(size) { 
$("#price").html("$" + size * 0.08); 
} 

それはです私がやろうとしていることがうまくいかないのか、それとも間違っているのか分かりません。

ご協力いただきありがとうございます。

+0

こんにちはとスタックオーバーフローを歓迎します。 javascriptコンソールにエラーが表示されていませんか?それは私たちが間違っていることを絞り込むのに役立ちます...選択肢をダミー値だけにハードコーディングして、あなたのhtml/jsが壊れているかどうかを判断しましたか? –

+0

私は何の誤りもありません。ブラウザではサイズ選択フィールドに19 * 29 "> 19 * 29(寸法2280 x 3480の画像の場合)と価格フィールドに何も表示されず、価格フィールドに19 * 29と$ 44.08が表示されます問題は、選択肢の選択肢にjQueryを挿入しようとしている... –

+0

文字どおり: '19 * 29"> 19 * 29'?何らかの理由でテキストと値の間で混乱しているように見えます。タイプミスがあったり、不適切に終了した文字列をどこかに似たようなものがある場合に起こります。だからこそ、ダミー値テストはあなたを助けることができます...ダミー値がハードコードされている場合は動作しますが、オプションを動的にレンダリングしようとするとうまくいかない場合は、それらが動的にレンダリングされるのではなく、オプションに作用するロジックではなく、レンダリングされます。 :)(デバッグテクニック!) –

答えて

0

私はこのようなものを試します。

$('select#size').change(function() { 

    var amount = $('select#size').val(); 
    var newAmt = amount * 0.08 
    $('#price').val('$' + newAmt); 

}) 

コードの一部を分解して、どちらが機能しているかを確認してください。これが見てチェックしようとするだろう次その後、機能している場合、これはその後、動作する場合は、この

$('select#size').change(function() { 
    var amount = $('select#size').val(); 
    console.log(amount) 
    //checking to see if .change function works 
    //and if you are able to collect the value of 
    //whats inside 'select#size' 
}) 

のような単純な何かを始めるたとえば

は、多分あなたは、次の行

var newAmt = amount * 0.08 
console.log(newAmt) 

を行うことを検討することができます#priceフィールドに正常に電話をかけている場合は、ザッツはその後、作業している場合、それらのすべてがあまりにも動作するはず全体のコードを組み合わせて、作業している場合

var price = $('#price').val(); 
console.log(price) 

だから多分あなたは #price最初

$('#price').val('its working!') 

に値を配置してみてください。お役に立てれば!

+0

私はそれを試みましたが、それは動作しませんでしたが、それは私に何か似たような試みにつながった: 'function showPrice(size){ \t var Amt = $(size).val(); \t $( "#price").html( 'Price:$' + Amt * 0.8); } '入力が整数の場合に動作します...問題は、入力が16 * 25か他の任意の次元であれば計算を行わないということです...なぜ乗算がそうでないのか分かりません完了しました...ただNaNを表示します:/ –

+0

これはあなたの 'price'選択に表示されている値が何であるかによって異なりますか? 'NaN'はNot A Numberを意味します。したがって、値が 'select'フィールドに格納される方法のため、JavaScript/jQueryは文字列に' 0.8'を乗算することができないので、メソッドを処理できません。だからこそ、あなたの問題がどこにあるのだろうか。 – angkiki

1

私は最終的に思いついた解決策です...私は目標を少し変更しました。ユーザーがサイズフィールドを自動的に更新するようにしようとするのではなく、別の段落を作成しました。フォームフィールド)。

<div id="order_form"> 

<p id='price'><%= '$' + :size.to_int * 0.8 %></p>  
<div class="field"> 
    <%= f.label(:size) %><br> 
    <%= f.select :size, ["#{@image.dimensions['width']/120} X # {@image.dimensions['height']/120}", "#{@image.dimensions['width']/140} X #{@image.dimensions['height']/140}", "#{@image.dimensions['width']/160} X #{@image.dimensions['height']/160}", "#{@image.dimensions['width']/180} X #{@image.dimensions['height']/180}", "#{@image.dimensions['width']/200} X #{@image.dimensions['height']/200}", "#{@image.dimensions['width']/220} X #{@image.dimensions['height']/220}"], {}, :oninput => "showPrice(this)" %> 
</div> 
</div> 

、ここで私のjQueryの機能です:ここでは次のようになります。これは、それ以外に動作

function showPrice(size) { 
var Amt = $(size).val(); 
var arr = Amt.split(" "); 
var newerAmt = Math.round(arr[0] * arr[2] * 0.8); 
$("#price").html('Price: $' + newerAmt); 
} 

が自動的に価格を示すいないときのデフォルトのサイズと形の負荷のページ...あらゆるその上のアドバイスは素晴らしいことだ...

~~~~~~~~~

OK私は最終的にその最後の部分を考え出しました。私はここに別のスレッドと呼ばれ、それが再送信のためにとても残念この溶液に私を導いたが、ここにある: JavaScriptがRubyのシンボルを認識するために取得するには:

<%= content_tag :div, class: "size_information", data: {size: @size} do %> 
<% end %> 
:サイズ私は、同じファイル内でこのdiv要素を追加しました

ブラウザには表示されませんが、JSに必要なデータが含まれています。それから私は、そのデータを参照し、その同じページ上のJS関数の は変数としてそれを使用することができました:

<%= javascript_tag do %> 
$(document).ready(function() { 
var size = $('.size_information').data('size'); 
var arr = size.split(" "); 
var newerAmt = Math.round(arr[0] * arr[2] * 0.8); 
$("#price").html('Price: $' + newerAmt); 
}) 
<% end %> 
+0

ページが読み込まれたときに表示するには、ページの下部にあるようにページが読み込まれるときに関数を実行する必要があります。 –

+0

それをしようとし続け、それは動作していません。ここに私のコード "<%= javascript_tag DO%> \t $(" 文書 ")です:; –

+0

' showPriceレディ(関数(){ \t showPrice(サイズ) }) <% end %>。"(:サイズ)' shouldnこれは実際のサイズで、単に 'size'というシンボルではないでしょうか? :) –

関連する問題