0

ユーザーがスコアを選択するたびに更新したいポップアップdivにスコアを表示するこのrails3アプリがあります...(フォームを送信します。)サーバー側でスコアが計算され、AJAXで返されます。これは機能します。次の JavaScript にブレークポイントを設定できます。

$('#eval_form')
    .bind("ajax:beforeSend", function (evt, xhr, settings) {
        xhr.setRequestHeader('accept', '*/*;q=0.5, ' + settings.accepts.script)
    })
    .bind("ajax:success", function (evt, data, status, xhr) {
        var $response = xhr.responseText
        var encoded = jQuery.parseJSON($response)
        $('#scoretotal').replaceWith('Total Evaluation Score: ' + encoded.scores[0])    

        //also change button text
        $('#score-popup').attr('value', 'testing value')
    });
});

encoded.scores[0]そして `encoded.scores[1] は彼らが望むものと同じです。jQuery の残りの部分が実行され、scoretotal の最初の行が正常に動作し、実際にそのスコアが変更されます...その後、新しいストアで一度だけ更新または置換を行わないだけです...

それだけでなく、ボタン

<button id="score-popup"><%= @document.score %></button>

値は、上記の jquery または .prop でさえ変更されません。なぜこれが不安定な動作をしているのか、私は途方に暮れています...ビューからの残りのコードは次のとおりです。

<div id="element_to_pop_up" class="bobsyouruncle">
   <a class="bClose">x</a>
   <table cellpadding="10">
   <tr>
      <th colspan="3">OVERALL EVALUATION RATING</th>
   </tr>
   <tr>
     <td colspan="3" id="scoretotal">Total Evaluation Score: <%= @document.score %></td>
  </tr>
  ...etc...
  </table>
</div>

だから私は愚かなことをしていると思います、それはすべて実行され、ある種の作品ですらあります(scoretotalが変更され、その後一度だけ変更され、スコアポップアップは決して変更されません...それはこの投稿と関係がありますか?

jQuery Ajax は 1 回しか実行されませんが、実行するたびに呼び出しているように見えます

??

編集:これを行うことでボタンが機能するようになりました:

   $('#score-popup').html(encoded.scores[0])

(どうやらそれはhtmlボタンであるため)そしてそれは機能しますが、コードの残りの部分は最初に実行されたときに機能しますが、後続のコードはデータを変更しないだけです。または replaceWith で正しく変更していませんか?

4

1 に答える 1

1

テーブル セル全体を別のものに置き換えているため、最初にテーブル セルがなくなってしまいます。

span タグで動的な値のみをラップします。

Total Evaluation Score: <span id="lbDocumentScore"><%= @document.score %></span>

次に、その内部テキストを割り当てます。

var $response = xhr.responseText;
var encoded = jQuery.parseJSON($response);
$('#lbDocumentScore').text(encoded.scores[0]);
于 2012-12-17T23:36:51.313 に答える