Jquery帖子没有改变响应的价值

时间:2012-01-11 03:30:50

标签: jquery jquery-selectors

我有一些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' />

3 个答案:

答案 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);
    });
});