jQuery隐藏不起作用.post成功函数

时间:2012-08-16 17:29:07

标签: jquery html post hide

任何人都可以告诉我为什么我的代码:$(this).parent().hide();.post()之外放置时可以正常工作(隐藏所选div):

$(document).on('submit', '.reply-message-form', function(e) {

        $(this).parent().hide();

        if($(this).children('.post-reply-message-textarea').val() == '')
            return false;

        $.post("<?php echo Yii::app()->createUrl('event/view', array('id'=>Yii::app()->controller->actionParams['id'])); ?>", 
        $(this).serialize(), function(response) {

            var responseObject = jQuery.parseJSON(response);
            // if successful.. process..
            if (responseObject.success == true) {

            } else {
                alert('failed');
            }

        });
        return false;
    }) ;

但是如果将.hide()放在里面 .post()成功函数没有任何反应..?!内部代码:

$(document).on('submit', '.reply-message-form', function(e) {

        if($(this).children('.post-reply-message-textarea').val() == '')
            return false;

        $.post("<?php echo Yii::app()->createUrl('event/view', array('id'=>Yii::app()->controller->actionParams['id'])); ?>", 
        $(this).serialize(), function(response) {

            $(this).parent().hide();
            return false;
            var responseObject = jQuery.parseJSON(response);
            // if successful.. process..
            if (responseObject.success == true) {

            } else {
                alert('failed');
            }

        });
        return false;
    }) ;

只是为了清除任何疑问 - responseObject.success确实== true(我已通过警报确认等)。

提前致谢!

2 个答案:

答案 0 :(得分:5)

尝试,因为当你在回调中移动时,$(this)不一样。

$(document).on('submit', '.reply-message-form', function(e) {
    var elt = $(this).parent();
    if($(this).children('.post-reply-message-textarea').val() == '')
        return false;

    $.post("<?php echo Yii::app()->createUrl('event/view', array('id'=>Yii::app()->controller->actionParams['id'])); ?>", 
    $(this).serialize(), function(response) {

        $(elt).hide();
        return false;
        var responseObject = jQuery.parseJSON(response);
        // if successful.. process..
        if (responseObject.success == true) {

        } else {
            alert('failed');
        }

    });
    return false;
}) ;

答案 1 :(得分:1)

this不再代表提交的表单,因为它位于来自ajax调用的回调中。在进行ajax调用之前,请使用此设置变量。

var myForm = this;

然后在您的成功回调中,参考$(myForm)