0

私は次のコードに困惑しています。誰かが私がjavascriptが値pにアクセスできないということを間違っていると教えてもらえますか?ありがとう!ビューでjavascript(JQuery)にRoR値を渡す

<% p=progress_for(contest_score) %> # p is non-zero 

<script type="text/javascript"> 
    $(function(){ 
     $('#contest_progressbar').progressbar({value: <%=p%>}); 
     <!--value p becomes 0 when rendered by jquery--> 

     $("#contest_progressbar").css({ 'background': 'LightYellow' }); 
     $("#contest_progressbar > div").css({ 'background': 'Orange' }); 
     $('#contest_progressbar span.text').text(<%=p%>+'%') 
     <!--value p becomes 0 when rendered by jquery--> 

    }); 
</script> 
progress: <%=p%> progress bar should be below: # p is the correct value here 

<div id='contest_progressbar' style="margin-left:20px; height: 20px;"> 
    <span class="text"></span> 
</div> 

EDIT:代わりにまっすぐなスクリプトタグを使用します。しかし同じ問題です EDIT2:今はJQueryの問題と思われます。ブライアンの答えへのコメントのHTMLを参照

+2

理論的には、私が見ているものからうまくいくはずです。ブラウザで「ソースを表示」すると、HTML出力にプロセスバー({値:0})として実際に印刷されていますか? – ghayes

+0

私はJavaScriptの行の最後にあるルビーのコメントはあなたがここに私たちのために追加したものだと仮定しています、はい?また – jaydel

+0

、あなたは(CSSファイルに最適な)とスタイル情報( '<%= text %>'のようなベストです)固定値にはJavaScriptを使用している特定の理由があるのでしょうか? – brymck

答えて

0

jQueryがロードされていない可能性はありますか?デバッガをチェックインすると、$ is not definedのようなヒントが得られます。 Prototype/jQueryの競合がある場合(Railsをv3.1より前に使用している場合は可能性が高い)、サイレントモードで失敗する可能性があります。

のjQueryを読み込んだ後に、JSコードブロックをと表示する必要がある場合もあります。私はこれが問題であると思っています理由は、あなたはjQueryのは正しくロードされず、ID contest_progressbarであり、他の要素がある場合は、必ず$('#contest_progressbar span.text').text(5+'%');はず仕事ようにあなたが提供した情報、何かを与えられました。

例:またhttp://jsfiddle.net/6JQNe/1/

、いくつかのマイナーなポイント:

  • は、あなたはそれがレンダリングすることを確認する(等号注意)<%= javascript_tag do %>を必要としています。
  • "#contest_progressbar > div"は、固定されたもの
+0

32%
tm65

+0

確かにJQueryがあります。私たちはPrototype/JQueryの問題を後に世話しました。 (それは私たちがbtwを使っているRails 3です)。 Jqueryによって生成されたdivを参照してください。問題は、outter divのaria-valuenowと内部divの幅が両方とも0であることです。値をハードコーディングしてプログレスバーを作成すると、前述の2つの値が表示されます。 – tm65

+0

あなたの2番目のマイナーポイントについては、ここでプログレスバーの色分けコードを借りました:[リンク](http://stackoverflow.com/questions/1476573/jquery-ui-how-to-change-the-color-of-a-progressbar ) – tm65

0

問題とは一致しません。 JQueryとは何の関係もありませんでした。プログレスバーのdiv idは、コードが部分的に存在し、ループ内のビューメソッドによって呼び出されるため、酷評されていました。すべてのコールが同じdivを上書きし続けます。以下のコードは私が望む結果を生成します。

<% pbar_id="pbar_#{contest_score.user_id}" %> 

<script type="text/javascript"> 
    $$(function(){ 
     $$('#'+"<%=pbar_id%>").progressbar({'value':<%=p%>}) 
     $$('#'+"<%=pbar_id%>").css({ 'background':'LightYellow' }); 
     $$('#'+"<%=pbar_id%>"+' > div').css({ 'background':'Orange' }); 
    }); 
</script> 
progress: <%=p%>% 
<div id=<%=pbar_id%> style="margin-left:20px; width:256px; height:20px;"> 
</div> 
関連する問題