我正在尝试上/下投票系统,但是当我从API获得响应时,我似乎无法定位我想要的元素,这是li中的一个“得分”的范围”。
我的js处理程序
jQuery(document).ready(function($) {
function vote(obj, post_id,vote) {
if(vote && post_id) {
$.get('/ajax/vote', {
v: vote,
p: post_id
}, function(data){
//set the .score to the new count returned by API
console.log(data);
$(obj).child('li.score').html(data.votes);
});
}
}
$(document.body).on("click", ".upvote", function(obj){
console.log("Up Voted");
var post_id = $(this).closest(".card").prop('id').replace(/post-id-/, '');
vote(obj,post_id,1);
});
$(document.body).on("click", ".downvote", function(){
console.log("Down Voted");
// more to come
});
});
触发事件的html视图以及它下面的“得分”区域。
<div class="vote-controls col-xs-1">
<ul>
<li class="upvote"><a href="#" class="disable"><span class="fa fa-angle-up "></span><span class="sr-only">↑</span></a></li>
<li class="downvote"><a href="#" class="disable"><span class="fa fa-angle-down"></span><span class="sr-only">↓</span></a></li>
<li class="score"><span>0</span></li>
</ul>
</div>
答案 0 :(得分:1)
li.score
不是obj
的孩子。鉴于该对象实际上是通过将$(this)
传递给函数而单击的DOM对象,我想它应该是:
$(obj).parent('ul').children('li.score').html(data.votes);
答案 1 :(得分:0)
问题是obj
是Event
对象,而不是您的HTML元素。此外,没有child
方法。使用children
:
更改此行:
vote(obj, post_id, 1);
为:
vote($(this).parents('ul'), post_id, 1);
这应该将ul
传递给您的vote()
函数。
并改变:
$(obj).child('li.score').html(data.votes);
为:
$(obj).children('li.score').html(data.votes);
答案 2 :(得分:0)
obj是事件对象,这是你想要做的事情
$(obj.currentTarget).siblings('li.score').find('>span').text(html.votes);