2013-02-24 4 views
0

У меня есть эта простая форма проверки & и все отлично работает за исключением «это» точки, ну, я понятия не имею, что:JQuery это() не похоже на работу

$('#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)) (там только объект с + рядом с ним, и когда я нажимаю + Я вижу все виды данных за исключением класса/идентификатор этого элемента .? :() Любые идеи есть ли что-то случилось с моим кодом

ответ

1

Вы теряете контекст В submit функции #contact элемент контекста асинхронность настройки обратного вызова Ajax контекст

с Jquery документации?...:

Эта ссылка во всех обратных вызовах является объектом в контексте опцией, переданной в $ .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(); 
     } 
    }); 
    }); 
}); 
+0

Это часть проблемы, когда я объявляю 'что-то = $ ('# contact') ', а затем использовать' something' при успешном выполнении. НО, когда я пытаюсь использовать 'this' вместо' $ ('# contact') ', то он ничего не меняет. Любые идеи почему? – Wordpressor

+0

похоже, что мне пришлось добавить '$' перед именем переменной, чтобы он работал. Любые идеи почему? Мне просто интересно, если у вас есть какие-то теории. – Wordpressor

+0

Speransky Danil, вы меня неправильно поняли, так как я сказал, что мне нужно добавить '$' в имя переменной (так что я ранее объявлял переменную). Большой вопрос заключается в том, почему «var x» содержит новый ajax contex, в то время как «var $ x» кэширует старый контекст, который я хочу :) – Wordpressor

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(); 
      } 
     }); 
}); 
+0

Я знал о том, что это было в контексте метода успеха, но выглядит так работает только тогда, когда я делаю 'var $ something = $ (this)' и не работает с 'var something = $ (this)', любая идея, почему это так? Есть ли большая разница между «var x» и «var $ x»? Большое спасибо! :) – Wordpressor

+0

@Wordpressor Добро пожаловать, нет никакой разницы между этими переменными. '$' - это только соглашение, которое используется для обращения к объектам jQuery. – undefined

+0

Тогда действительно странно, что он работает с '$' и не без :) – Wordpressor

Смежные вопросы