Как выделить несколько похожих форм и divs в скрипте формы jQuery

#jquery #forms #form-submit

#jquery #формы #форма-отправить

Вопрос:

У меня на странице есть несколько похожих форм, и я использую плагин jQuery form. После отправки любой из форм я хочу обновить div над конкретной формой, из которой данные были отправлены в ответе со страницы php / asp.
Но я не знаю, как различать формы в скрипте jQuery, чтобы получать ответ на определенный div.

Вот оригинальный скрипт, в котором нет возможности различать формы и divs:

 <script type="text/javascript" src="jquery.form.js"></script> 
    <script type="text/javascript"> 
$(document).ready(function() { 
    $('#htmlForm').ajaxForm({ 
        target: '#htmlExampleTarget', 
        success: function() { 
            $('#htmlExampleTarget').fadeIn('slow'); 
        } 
    }); 
});    
  

Вот формы и divs:

 <form id='htmlForm' action='process.asp' method='post'>
<input TYPE='hidden' NAME='ID' VALUE='1'>
<input type='submit' value='Go'></form>

<div id='htmlExampleTarget'></div>


<form id='htmlForm' action='process.asp' method='post'>
<input TYPE='hidden' NAME='ID' VALUE='2'>
<input type='submit' value='Go'></form>

<div id='htmlExampleTarget'></div>
  

и т.д.

Формы и разделы создаются с помощью цикла, нет проблем с изменением их идентификаторов численно… Мне просто нужен скрипт, чтобы различать их. Теперь я могу обновить только первый div по ответу с сервера.

Ответ №1:

вы знаете, что каждый объект должен иметь уникальный идентификатор, который не соответствует действительному HTML-коду, совместимому с w3, в любом случае, как насчет

 ...
success: function() { 
            $(this).prev('div').html('banana dance');
        } 
  

Ответ №2:

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

ie.

 <form id='htmlForm_1' class='htmlForm' action='process.asp' method='post'>
  

Ответ №3:

Я бы сделал следующее,

 <div class="wrap_form">
   <div class="above"></div>
   <form>
   </form>
</div>

<div class="wrap_form">
   <div class="above"></div>
   <form>
   </form>
</div>

$('form').submit(function (){  
    var form $(this);
    $.ajax({
     ... options go here ...,
     success:function (r) {
           $(form).parents('.wrap_form').find('.above').html('blablabla');
      }
    })
});
  

///но, глядя на ваш подход

используйте $('form').prev('div');

Комментарии:

1. Здравствуйте, спасибо за совет. Я ввел разные идентификаторы (htmlForm_1, htmlForm_2 и т.д. И htmlExampleTarget_1, htmlExampleTarget_2 и т.д.) Для всех форм и разделов. Что вы имеете в виду, как должен выглядеть код javascript сейчас? Спасибо.

2. ну, это сложно объяснить, но использование ответа @max4ever должно помочь вам в вашей текущей ситуации

Ответ №4:

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

 $(document).ready(function() {
    $('#htmlForm_1').ajaxForm({
        target: '#htmlExampleTarget_1',
        success: function() {
            $('#htmlExampleTarget_1').fadeIn('slow');
        }
    });
});
  

и т.д.

За то, что вы спросили в комментариях:

Вы могли бы использовать поле ввода name=»id» при отправке, чтобы получить цель таким образом

     var targetNum = 0; //outside the functions


            targetNum = jQuery(this).children('input[name="ID"]').val();
 $('#htmlExampleTarget' targetNum).fadeIn('slow');
  

Комментарии:

1. Хорошо, но, похоже, мне придется поместить туда какую-то переменную вместо чисел, потому что у меня есть htmlForm_1, htmlForm_2 и т.д… Есть идеи?

2. Это должно быть сделано при отправке. Получите значение ввода [name=»ID»] и используйте его. Я редактирую ответ, чтобы понять, что я имею в виду

3. Я собрал код вместе, но он не работает. Есть идеи? var targetNum = 0; $(document). готово(функция() { targetNum = jQuery(this).дочерние элементы (‘input[name=»MapaID»]’).val(); $ (‘#HtmlForm’ targetNum).ajaxForm({ target: ‘#htmlExampleTarget’ targetNum, успех: функция() { $(‘#htmlExampleTarget’ targetNum).fadeIn(‘медленно ‘); } }); });

4.Это новый код, который я пытаюсь: var targetNum = 0; $(document).ready(function() { $('#htmlForm1').ajaxForm({ targetNum = jQuery(this).children('input[name="MapaID"]').val(); target: '#htmlExampleTarget', success: function() { $('#htmlExampleTarget' targetNum).fadeIn('slow'); } }); });