2

谁能告诉我为什么我的代码:$(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 (我已经通过警报等确认了这一点)。

提前致谢!

4

2 回答 2

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;
}) ;
于 2012-08-16T17:31:56.290 回答
1

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

var myForm = this;

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

于 2012-08-16T17:33:23.903 回答