很抱歉,如果问题不明确。
基本上我有一个投票系统。我希望用户点击的按钮在请求完成后更改其类值。在request.done(function(){CHANGE BUTTON'S CLASS VALUE})
内。
到目前为止,我只能更改所有按钮的属性,而不仅仅是用户点击的按钮。
以下是我现在的代码:
使用Javascript:
$(function() {
$("body").on("click", ".vote", function (event) {
var request = $.ajax({
url: $(this).attr("href"),
dataType: 'json'
});
event.preventDefault();
//My problem START
request.done(function (data) {
$('.vote button').attr('class', 'btn btn-primary btn-sm');
});
//My problem END
request.fail(function (data) {
alert("Voting failed!");
});
});
});
PHP:
<a class="vote" href="<?php base_url(); ?>vote/like/<?php echo $row['id']; ?>">
<button type="button" class="btn btn-default btn-sm">
<span style="font-size: 3em" class="glyphicon glyphicon-thumbs-up"></span>
</button>
</a>
答案 0 :(得分:3)
$(this)
在$('.vote')
承诺中没有对done()
个实例的引用。缓存事件处理程序顶部的引用:
$(function() {
$("body").on("click", ".vote", function (event) {
var $this = $(this);
// ...
request.done(function (data) {
$this.children('button').attr('class', 'btn btn-primary btn-sm');
});
});
});
答案 1 :(得分:0)
这个怎么样?
$(function() {
$("body").on("click", ".vote", function (event) {
var clicked = this; // save pointer to the clicked button
var request = $.ajax({
url: $(this).attr("href"),
dataType: 'json'
});
event.preventDefault();
//My problem START
request.done(function (data) {
$(clicked).attr('class', 'btn btn-primary btn-sm');
});
//My problem END
request.fail(function (data) {
alert("Voting failed!");
});
});