2013-05-16 2 views
1

Я новичок в JQuery, но я собрал код для поиска jquery по выбору изменения рядом с кодом для добавления/удаления кнопок экземпляра, причем идея заключается в том, что пользователь выбирает запись в раскрывающемся списке, и страница возвращает таблицу, содержащую информацию в базе данных. При необходимости пользователь может нажать кнопку, чтобы добавить копию выпадающего списка и выбрать другую запись и т. Д.JQuery, предназначенный для конкретных экземпляров клонированного HTML для поиска и результатов поиска php

У меня возникло несколько проблем с кодом, который выполняет фактический поиск, и только первое выпадающее меню действительно отправляет и получает любые данные, другие, хотя у них есть правильные имена и т. д., ничего не делают.

Что было бы лучшим способом обеспечить, чтобы каждая клонированная группа действовала независимо от другой?

 $(document).ready(function() { 
     // Am I correct in thinking that if this variable is read on load it will never update and always be 1 as there are no other cloned inputs. 
     var num = $('.clonedInput').length; 

     $('#issue-drop' + num).change(function() { 

      var qString = 'id=' +$(this).val(); 
      $.post('sub_db_handler.php', qString, processResponse); 

     }); 

     function processResponse(data) { 
      $('#results' + num).html(data); 
     } 

    }); 

Вот пример моих форм сгенерированного исходного

<div id="issues-wrap1" style="margin-bottom:4px;" class="clonedInput"> 
      <select name="Issues[]" id="issue-drop1"> 
       <option selected>Please Select...</option> 
       </select> 
      <div id="results1"> 

      </div> 
     </div> 

<!-- Second div starts here --> 

<div id="issues-wrap2" style="margin-bottom:4px;" class="clonedInput"> 
      <select name="Issues[]" id="issue-drop2"> 
       <option selected>Please Select...</option> 
       </select> 
      <div id="results2"> 

      </div> 
     </div> 
+0

"Я правильно думать, что, если эта переменная считывается при загрузке он никогда не будет обновляться и всегда быть 1, поскольку нет никаких других клонированные входы ". Ya, вы правы –

ответ

1

Вы должны использовать делегирование: {увидеть, если его работы для вас}

$(document).on('change','.clonedInput select',function() { 

     var data = {id: $(this).val()}; 
     $.post('sub_db_handler.php', data, processResponse); 

    }); 
+0

Это очень полезно, каждый выпадающий список теперь работает правильно, запросы отправки и переменная num, которая никогда не обновлялась ранее, теперь тоже работают. Удивительный материал! – Funk247

+0

Пожалуйста, вместо того, чтобы использовать «документ» в качестве делегата, вы должны использовать ближайший статический родительский элемент .clonedInput. По статическому я имею в виду контейнер, который не будет добавлен/удален динамически из DOM. –

+0

. Хмм, запись в результаты div дает мне проблемы, так как я использую эту переменную, чтобы решить, какой div получает результаты, а не динамически таргетирует их. Как бы вы гарантировали, что правильный div получит данные. На данный момент, если я обновляю более ранний экземпляр, его результат div в последнем экземпляре изменяется. – Funk247

0
$('.clonedInput').length; 

Эта строка возвращает номер элемента с классом «clonedInput» на вашей странице. В этом случае «2». Вы должны сделать «for», чтобы вы могли добавлять события к каждому элементу.

+0

Я так и думал, но на загрузке страницы, где есть только один элемент, он будет установлен только 1. Вот почему его единственное в этом работает. Теперь я буду искать петли: D – Funk247