2012-08-16 135 views
1

谁能告诉我为什么我的代码:$(this).parent().hide();作品(选择DIV是隐藏的),当放入我的.post()像外界:jQuery的隐藏不工作.post的内部函数成功

$(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

请尝试,因为$(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; 
}) ; 
+0

你打我。我喜欢这种方式,因为所有你需要的是成功回调中的父项。 – Gromer 2012-08-16 17:34:17

+1

是有道理的 - 谢谢! – 2012-08-16 17:34:24

1

this并不代表提交的表单了,因为它是从Ajax调用回调。在进行ajax调用之前,用此设置一个变量。

var myForm = this; 

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