Javascript 实现类似功能的问题。函数只工作一次
“喜欢”或“不喜欢”函数只工作一次,就好像“喜欢”变量不再是true或false一样,这将是有效值。第一次它运行良好(喜欢和不喜欢),但第二次“其他”警报出现,这对我来说是绝对不清楚的。你能解释一下那里可能出了什么问题吗?html中的Bool在我通过alert检查时已正确更新 带有小django模板代码的HTML,请不要注意:Javascript 实现类似功能的问题。函数只工作一次,javascript,jquery,Javascript,Jquery,“喜欢”或“不喜欢”函数只工作一次,就好像“喜欢”变量不再是true或false一样,这将是有效值。第一次它运行良好(喜欢和不喜欢),但第二次“其他”警报出现,这对我来说是绝对不清楚的。你能解释一下那里可能出了什么问题吗?html中的Bool在我通过alert检查时已正确更新 带有小django模板代码的HTML,请不要注意: <div class="incriminate_like" data-post-pk="{{ answer.pk }} " data-who-likes-id="{
<div class="incriminate_like" data-post-pk="{{ answer.pk }} " data-who-likes-id="{{ request.user.id }} " >
<div class="data_div" data-bool="false">
<img class="like_image" src="{% static "img/like.png" %}"/>
</div>
</div>
问题是,若调用makeLiked()或makeDisliked(),则将数据bool值设置为string,所以这就是为什么liked==true(甚至liked==false)只返回false。 尝试设置如下内容:
that.find(".data_div").data("bool", true);
(请注意,第二个参数不带“”)
最后的代码应该是这样的:
$('.incriminate_like').click(function() {
var post_pk = $(this).data("post-pk");
var who_likes_id = $(this).data("who-likes-id");
var that = $(this);
var liked = $(this).find(".data_div").data("bool");
function makeLiked() {
that.find("img").attr("src", "{% static 'img/likered.png' %}");
that.find(".data_div").data("bool", true);
// just incriminating
var like_number_original = that.next().html();
var integer_of_like_number_original = parseInt(like_number_original);
var plus_one_number = integer_of_like_number_original + 1
that.next().html(plus_one_number);
}
function makeDisliked() {
that.find("img").attr("src", "{% static 'img/like.png' %}");
that.find(".data_div").data("bool", false);
// just incriminating
var like_number_original = that.next().html();
var integer_of_like_number_original = parseInt(like_number_original);
var plus_one_number = integer_of_like_number_original - 1
that.next().html(plus_one_number);
}
if (liked == false) {
ajaxPost('/like/', {
'post_pk': post_pk,
'who_likes_id': who_likes_id,
'whom_id': whom_id
}, function() {
makeLiked();
})
} else if (liked == true) {
ajaxPost('/dislike/', {
'post_pk': post_pk,
'who_likes_id': who_likes_id,
'whom_id': whom_id
}, function() {
makeDisliked();
})
} else {
alert('error');
}
})
问题是,若调用makeLiked()或makeDisliked(),则将数据bool值设置为string,所以这就是为什么liked==true(甚至liked==false)只返回false。 尝试设置如下内容:
that.find(".data_div").data("bool", true);
(请注意,第二个参数不带“”)
最后的代码应该是这样的:
$('.incriminate_like').click(function() {
var post_pk = $(this).data("post-pk");
var who_likes_id = $(this).data("who-likes-id");
var that = $(this);
var liked = $(this).find(".data_div").data("bool");
function makeLiked() {
that.find("img").attr("src", "{% static 'img/likered.png' %}");
that.find(".data_div").data("bool", true);
// just incriminating
var like_number_original = that.next().html();
var integer_of_like_number_original = parseInt(like_number_original);
var plus_one_number = integer_of_like_number_original + 1
that.next().html(plus_one_number);
}
function makeDisliked() {
that.find("img").attr("src", "{% static 'img/like.png' %}");
that.find(".data_div").data("bool", false);
// just incriminating
var like_number_original = that.next().html();
var integer_of_like_number_original = parseInt(like_number_original);
var plus_one_number = integer_of_like_number_original - 1
that.next().html(plus_one_number);
}
if (liked == false) {
ajaxPost('/like/', {
'post_pk': post_pk,
'who_likes_id': who_likes_id,
'whom_id': whom_id
}, function() {
makeLiked();
})
} else if (liked == true) {
ajaxPost('/dislike/', {
'post_pk': post_pk,
'who_likes_id': who_likes_id,
'whom_id': whom_id
}, function() {
makeDisliked();
})
} else {
alert('error');
}
})
你能提供更多的html代码吗?“incriminate_like”类的元素是什么?您的问题是$(this).find(“.data_div”).data(“bool”)返回未定义的元素,因此它可能找不到元素“data_div”@DamianBartosik好的,这里还有一些django模板代码,您能提供更多html代码吗?“incriminate_like”类的元素是什么?您的问题是$(this).find(“.data_div”).data(“bool”)返回未定义的元素,因此它可能找不到元素“data_div”@DamianBartosik好的,还有一些django模板代码