我正在尝试创建类似投票系统的Stackoverflow,但我遇到了一个小问题。
我有以下HTML,它连接了jQuery onClick事件:
<div id="c_<%=Html.Encode(Model.C.cID) %>" class="votes">
<img src="../../Content/gfx/Up.png" class="up" alt="" />
<span class="votecount"><%= Html.Encode(Model.C.VoteCount)%></span>
<img src="../../Content/gfx/Down.png" class="down" alt="" />
</div>
jQuery onClick看起来像这样:
$(".up").click(function() {
var id = $(this).parent().attr("id").split("_");
if (id[0] == "c") {
//C Vote
//id[1] contains the id number.
$.post("/Vote/CUp", { id: id[1] }, function(data) {
$(this).parent().children(".votecount").html(data.voteCount);
},
"json"
);
} else {
//R Vote
$.post("/Vote/RUp", { id: id[1] }, function(data) {
$(this).parent().children(".votecount").html(data.voteCount);
},
"json"
);
};
});
我的问题在于尝试更新投票计数。我只是无法弄清楚如何使用JSON对象中返回的值更新votecount span。
JSON对象正在返回数据,我已使用alert(data)
验证了这一点非常感谢帮助。
答案 0 :(得分:2)
在$ .post()回调的范围内, this 将为您提供对XMLHttpRequest对象的引用,而不是引发先前单击事件的元素。
您可以将 this 分配给Click处理程序范围内的变量,它仍然可以在$ .post()的回调中使用。像这样:
$(".up").click(function() {
var id = $(this).parent().attr("id").split("_");
// Due to the awesome magic of closures, this will be available
// in the callback. "el" is a weak name for the variable, you
// should rename it.
var el = this;
if (id[0] == "c") {
//C Vote
//id[1] contains the id number.
$.post("/Vote/CUp", { id: id[1] }, function(data) {
// siblings() is an easier way to select that.
$(el).siblings(".votecount").html(data.voteCount);
}, "json");
} else {
//R Vote
$.post("/Vote/RUp", { id: id[1] }, function(data) {
$(el).siblings(".votecount").html(data.voteCount);
}, "json");
};
});
答案 1 :(得分:0)
尝试:
$(this).next(".votecount").html(data.voteCount);
答案 2 :(得分:0)
您可以尝试以下方式:
<div id="c_<%=Html.Encode(Model.C.cID) %>" class="votes">
<img src="../../Content/gfx/Up.png" class="up" alt="" />
<span class="votecount" id="vc_<%=Html.Encode(Model.C.cID) %>">
<%= Html.Encode(Model.C.VoteCount)%>
</span>
<img src="../../Content/gfx/Down.png" class="down" alt="" />
</div>
使用以下jQuery:
$(".up").click(function() {
var id = $(this).parent().attr("id").split("_");
if (id[0] == "c") {
//C Vote
//id[1] contains the id number.
$.post("/Vote/CUp", { id: id[1] }, function(data) {
$("#vc_"+data.id).html(data.voteCount);
},
"json"
);
} else {
//R Vote
$.post("/Vote/RUp", { id: id[1] }, function(data) {
$("#vc_"+data.id).html(data.voteCount);
},
"json"
);
};
});
并确保将传递的id
传递给data
json对象中的$ .post()函数。
请注意,我们可以调用的投票计数div添加唯一标识符。