我有一些jquery在点击链接时运行(下面)。这允许将数据发送到mysql数据库,然后更新某个<p>
的值。但是,这不起作用。我添加了一个alert(response)
,我得到了正确的结果,但<p>
没有改变,这可能意味着我使用了错误的选择器。
JQUERY:
$('.upVote').click(function(e){
e.preventDefault();
answer_id = $(this).siblings('.record_id').attr('value');
$.post('../answerrating.php' , {answer_id: answer_id} , function(response){
$(this).prev('.ratingBox').val(response);
});
});
HTML:
<p class='ratingBox'> $answerrating[$f]</p>
<a href='#' class='upVote'>Upvote</a> <a href='#' class='downVote'>Downvote</a>
<input type='hidden' name='record_id' value='$answerid[$f]' class='record_id' />
答案 0 :(得分:2)
试试这个。
$('.upVote').click(function(e){
e.preventDefault();
var target_elem = $(this).prev('.ratingBox');
answer_id = $(this).siblings('.record_id').attr('value');
$.post('../answerrating.php' , {answer_id: answer_id} , function(response){
target_elem.text(response);
});
});
答案 1 :(得分:1)
this
不会引用在AJAX回调中单击的元素。尝试存储事件处理程序的上下文,并在回调函数中使用它。
此外,在修改非input
元素的内容时,您应该使用.text()
或.html()
:
$('.upVote').click(function(e){
var self = this;
e.preventDefault();
var answer_id = $(this).siblings('.record_id').attr('value');
$.post('../answerrating.php' , {answer_id: answer_id} , function(response){
$(self).prev('.ratingBox').html(response);
});
});
答案 2 :(得分:0)
错误可能是因为this
成功回调中的特殊变量.post()
的值几乎肯定不是点击事件处理程序响应的DOM元素。
要解决此问题,请在单击回调中为this
的值设置一个变量,并在成功回调中引用它。一般来说,这是一个很好的做法,只要你不能100%确定this
的价值,因为它因环境而异。
$('.upVote').click(function(e){
var button = this;
e.preventDefault();
answer_id = $(this).siblings('.record_id').attr('value');
$.post('../answerrating.php' , {answer_id: answer_id} , function(response){
$(button).prev('.ratingBox').val(response);
});
});