在客户端和服务器端使用socket.io。一切都在那里运作良好,除了$ .each,它只显示表中的一行。
代码:
$('#roll').click(function(e) {
e.preventDefault();
socket.emit('roll', {amount: $('#amount').val(), chance: $('#chance').val()});
socket.on('roll', function(rolls) {
$.each(rolls, function(index, roll) {
$('#rolls').html('<tr><td> ' + roll.id + '</td><td> ' + roll.amount + '</td><td> ' + roll.chance + '</td><td> ' + roll.result + '</td><td> ' + roll.number + '</td></tr>');
});
});
});
答案 0 :(得分:1)
$(&#39;#rolls&#39;)的innerHTML已在您的每个iternation中被替换,这是因为调用.html将替换所有内容。
引用jQuery:http://api.jquery.com/html/#html2
当.html()用于设置元素的内容时,该元素中的任何内容都将被新内容完全替换。
因此,您必须将代码更改为...
$('#roll').click(function(e) {
e.preventDefault();
socket.emit('roll', {amount: $('#amount').val(), chance: $('#chance').val()});
socket.on('roll', function(rolls) {
var htmlContent = '';
$.each(rolls, function(index, roll) {
htmlContent += ('<tr><td> ' + roll.id + '</td><td> ' + roll.amount + '</td><td> ' + roll.chance + '</td><td> ' + roll.result + '</td><td> ' + roll.number + '</td></tr>');
});
$('#rolls').html(htmlContent);
});
});