2013-12-24 5 views
0

Примечание: Я титулованный это очень плохо, пожалуйста, помогите мне улучшить его, если вы понимаете мой вопрос

Я использую ajaxform представить для всех моих форм. Я могу программно добавить div обратной связи в каждую форму успешно. I хочу выбрать только текущую форму на моей странице. Я использую следующий код.

$('form').append('<div class="feedback" />'); 
    $('form').ajaxForm 
    ({  
     success: function(responseText) 
     { 
      if(responseText=="1") 
      {   
       $(this).clearForm(); 
       $(this).children('INPUT,select').eq(0).focus(); 
      } 
      else  
      { 
       alert($(this).children().length); // This gives me 0 
       $(this).children('.feedback').eq(0).html(responseText); 
      } 
     } 
    }); 

я могу сделать выше, успешно только тогда, когда у меня есть один вид на всю страницу, используя $ («форма») вместо $ (это) но это проблема, когда у меня есть несколько форм в странице

+0

В чем проблема, с которой вы столкнулись, и можете ли вы показать HTML? –

+0

может видеть plz 'alert ($ (this) .children(). Length); // Это дает мне 0' в qestion – Sami

ответ

2

Если присмотреться на документы, будет видеть, что success обратного вызова передается 4 аргумента

1.) responseText or responseXML value (depending on the value of the dataType option). 
2.) statusText 
3.) xhr (or the jQuery-wrapped form element if using jQuery < 1.4) 
4.) jQuery-wrapped form element (or undefined if using jQuery < 1.4) 

Используйте последний аргумент вместо $(this) для текущей формы, например

See options tab of docs

Обновление от спрашивающего: рабочий код из выше ответа я получил в следующий

Вместо $(this) я мог сделать следующее

$('form').append('<div class="feedback" />'); 
var options = { success: showResponse }; 
$('form').ajaxForm(options); 
function showResponse(responseText, statusText, xhr, $form) 
{ 
    if(statusText == 'success')  
     $form.children('.feedback').html(responseText); 
} 

Link of example followed

1

$ (это) будет работать только в том случае, если контекст вызова для обратного вызова успеха является самим узлом формы.

Если это не работает, вы всегда можете кэшировать ссылку, и вы будете иметь доступ к нему в рамках обратного вызова:

var $form = $('form'); 

$form.ajaxForm({ 
    success: function (responseText) { 

     $form.clearForm(); 

    } 
}); 

Я не включил логику с ответом, потому что ответ является объектом с несколькими уникальными свойствами. Смотрите ответ на @charlietfl для свойств

------ UPDATE --------- 

Если проблема у вас есть то, что вам нужно получить доступ к , что формы после добавления в DIV, помните, что «добавить», наряду со всеми другими методами Jquery влияющие на узел, являются цепной:

$('form').append('<div>My Div</div>').ajaxForm(options....) 

Будем надеяться, что контекст вызова обработчика успеха является сама форма узла, если вы не можете кэшировать ссылку, как я сделал выше.

+0

будет по-прежнему влиять на все формы на странице из-за коллекции '$ ('form')' – charlietfl

+0

@charlietfl Смотрите мое обновление выше – TaylorMac

+0

, вы все еще кешируете всю коллекцию, поэтому экземпляр не отображается с использованием '$ form'. Другой способ - это цикл над формой $.каждый, а затем экземпляр кеша в этом цикле и инициализировать плагин на экземпляре – charlietfl

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

  • Нет связанных вопросов^_^