我已经实施了jquery星级评级。当用户添加其费率时,我将其保存到数据库并禁用星级评级
但是在禁用后如果用户再次点击星号,它再次调用js函数并尝试将分数保存到数据库。
<input name="rating" type="radio" class="star" value="3" />
...
$('.star').click(function(event) {
$.ajax({
type: "POST",
url: '@Url.Action("Rate", "Rating")',
data: $("#rate").serialize(),
success: function(response) {
alert('Your rating has been recorded');
$('.star').rating('disable', true);
},
error: function(response) {
alert('There was an error.');
}
});
});
答案 0 :(得分:4)
你可以在ajax调用之后取消绑定点击事件(使用off()
)
$('.star').click(function(event) {
var $this = $(this);
...
success: function(response) {
alert('Your rating has been recorded');
$this.off('click');
},
});
我想你可能有几个.star
个元素,所以你应该解除绑定点击链接上附带的处理程序。
另一个更简单的可能性是使用.one()
绑定处理程序,就像这样
$('.star').one('click', function(event) {
var $this = $(this);
...
success: function(response) {
alert('Your rating has been recorded');
},
});
这将只允许每个不同的.star
元素的一次点击事件
无论如何,我强烈建议你在服务器端进行这种检查。不要依赖客户端进行可能改变服务器上数据的操作