0

以下の create.js.erb コードを表示してください。これは、作成時に新しい投票をフェードインします。値が0未満の場合、総投票数の色を変更したいと思います。

以下のコードは、.style.color を .css("color", "orange"); に交換すると機能します。ただし、変更を永続的にしたいと思います。

<% if @vote.new_record? %>
alert("Failed to create vote: <%= j @vote.errors.full_messages.join(', ').html_safe %>");
<% else %>
var votes = $("<h1><%= @vote.votable.votes_count %></h1>");
<% if @vote.votable.votes_count < 0 %>
$('#<%= "#{votes_count}_#{id}" %>').style.color = "#FF8800";
<% end %>
$('#<%= "#{votes_count}_#{id}" %>').html(votes.fadeIn(1000));
<% end %>

.style.color を使用すると、fadeIn コードが呼び出されず、投票が表示されません。

このインスタンスで style.color が機能しないのはなぜですか?

編集

anspnm からのコメントのおかげで、問題のある行を次のように変更しました。

document.getElementById('<%= "#{votes_count}_#{id}" %>').className += " orange-arrows h1";

これは機能し、投票テキストの色を変更しますが、この色はまだ保持されておらず、ブラウザーが更新されると消えます。

4

1 に答える 1

1

要素をレンダリングするときの読み込み時に、投票数が存在するかどうかを確認します。

このようなもの

<div class="<%= @vote.votable.votes_count < 0 ? 'default-arrows' : 'orange-arrows' %>"> 

したがって、ページを更新すると、チェックはvote_countに基づいて色を処理します。

そして、ajax呼び出しにはこれを使用します。これにより、ajaxを介して新しく作成された要素が処理されます

$('#<%= "#{votes_count}_#{id}" %>').addClass('orange-arrows')
于 2013-05-31T09:28:57.547 に答える