我有这个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正确更改它?
答案 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]);