0

我有这个 rails3 应用程序,它在弹出 div 中显示一个分数,每次用户选择分数时我都希望更新该分数......(提交表单。)在服务器端计算分数并以 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 工作正常,它确实会改变这个分数...ONCE 任何后续的新商店,它只是不再更新或替换......

不仅如此,按钮

<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>

所以我认为我在做一些愚蠢的事情,这一切都在执行,甚至是某种工作(总分改变了一次,之后不再有一次,并且分数弹出窗口永远不会改变......这与这篇文章有关吗:

jQuery Ajax 只执行一次,但似乎每次都应该调用

??

编辑:我确实通过这样做使按钮工作:

   $('#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 回答