jQuery正确执行但只进行一次更改

时间:2012-12-17 23:17:16

标签: jquery ruby ajax ruby-on-rails-3

我有这个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的其余部分执行,第一行得分总计工作得很好,它确实会改变那个得分......随后新商店的任何时候,它只是不更新​​或再做替换......

不仅如此,还有按钮

<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 only executing once, but appears to call every time it should

...

编辑:我确实通过这样做了按钮:

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

(显然是因为它是一个html按钮)并且可以工作,虽然其余的代码只是第一次执行它的后续执行它只是不会改变数据,也许我抓错了?或者不使用replaceWith正确更改它?

1 个答案:

答案 0 :(得分:1)

您正在用其他东西替换整个表格单元格,因此在第一次没有表格单元格之后。

仅包含范围标记中的动态值:

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

然后分配其内部文本:

var $response = xhr.responseText;
var encoded = jQuery.parseJSON($response);
$('#lbDocumentScore').text(encoded.scores[0]);