0

私はこの単純なフォームと検証を持っており、「これ」が指すことを除いて、すべてが完全に正常に機能します。

$('#contact').validator().submit(function(e){
        e.preventDefault();
        $.ajax({
          type: "POST",
          url: this.action,
          data: { 
            mail: jQuery('input[name="mail"]').val(), 
            message: jQuery('textarea[name="message"]').val(),
          success: function(){
            $(this).hide();
          }
        }); 
    });

このコードで成功時に #contact を非表示にしたいのですが、これは決して起こりません。

しようとしましたalert(this)が、取得[object Object]したときに同じことが起こりましたconsole.log( $(this) )(横に + があるオブジェクトのみがあり、 + をクリックすると、この要素のクラス/ IDを除くあらゆる種類のデータが表示されます:( )。何かアイデアはありますか?私のコードに何か問題がありますか?

4

2 に答える 2

1

コンテキストを失います。In submitfunction#contact要素はコンテキストです。ajaxコールバックでは、ajax設定がコンテキストです。

jQuery ドキュメントから:

すべてのコールバック内の this 参照は、設定で $.ajax に渡されるコンテキスト オプションのオブジェクトです。コンテキストが指定されていない場合、これは Ajax 設定自体への参照です。

$('#contact').validator().submit(function (e) {
  e.preventDefault();

  var self = this;

  $.ajax({
    type: "POST",
    url: this.action,
    data: {
      mail: jQuery('input[name="mail"]').val(),
      message: jQuery('textarea[name="message"]').val(),
      success: function () {
        $(self).hide();
      }
    });
  });
});
于 2013-02-24T04:38:57.700 に答える
1

thisメソッドのコンテキスト内ではsuccess、クリックされた要素を参照していないため、要素をキャッシュする必要があります。

$('#contact').validator().submit(function(e){
        e.preventDefault();
        var $this = $(this); // cache the object
        $.ajax({
          type: "POST",
          url: this.action,
          data: { 
            mail: jQuery('input[name="mail"]').val(), 
            message: jQuery('textarea[name="message"]').val()
          }, // missing }
          success: function(){
            $this.hide();
          }
        }); 
});
于 2013-02-24T04:41:59.863 に答える