Как узнать количество элементов при добавлении и удалении элементов динамически с помощью jQuery? - PullRequest
0 голосов
/ 25 января 2009

Я работаю над веб-приложением (с ASP.NET 2.0 (C #) и jQuery)

В моем приложении есть интерфейс, с помощью которого наши сотрудники могут вводить записи о компании. Мы предоставили интерфейс с основными полями, названием компании, контактным лицом, телефоном и т. Д. Теперь, как вы знаете, у некоторых компаний есть свои филиалы, у некоторых - несколько (от 1 до 10), а у некоторых - много (100-200). Мы также предоставили динамический интерфейс с использованием jQuery, который позволяет нашим сотрудникам добавлять филиалы в зависимости от количества филиалов в конкретной компании.

Кроме того, мы использовали функцию добавления jQuery как ..

$("#branches").append("branch html fields text liek a html input field with id 'Namebranch1' ");

Теперь, с добавлением, мы также предусмотрели отдельную кнопку с полем ветви evey для удаления этой конкретной ветви. Для удаления я использовал

$("#branch1").remove()

Допустим, я добавил 5 веток, затем перед отправкой я чувствую, что ветку № 3 вводить не нужно, поэтому я удалил данные этой ветки. Итак, процесс добавления и удаления выглядит следующим образом, мы добавили

1,2,3,4,5

Затем мы удалили 3-ю ветку и теперь имеем

1,2,4,5

Теперь, когда у нас есть 4 элемента, каждый раз, когда мой пользователь добавляет или удаляет ветку, я добавляю 1 и вычленяю 1 из переменной javascript соответственно. И затем, введя эту переменную в скрытое поле, чтобы, когда пользователь отправлял данные, у меня было правильное количество подсчета, то, как пользователь добавил какие-либо ветви, и на основании этого подсчета я знаю, сколько раз я необходимо запустить цикл, чтобы перехватывать все данные ветвей по отдельности.

Но проблема в том, что когда пользователь отправляет форму, тогда я запускаю цикл 4 раза, что означает, я получу данные из 1,2 и 4 ветвей, но как цикл остановится, когда он завершит 4 цикла, данные 5-й ветви, которая на самом деле 4 будет отсутствовать. Поскольку элементы, которые будут опубликованы, когда пользователь отправит форму, имеют вид (branchName5, branchTitle5 и т. Д.)

Надеюсь, вы, ребята, понимаете, что мне нужно? Пожалуйста, скажите мне какое-нибудь логическое решение этой проблемы.

Спасибо

Ответы [ 2 ]

1 голос
/ 25 января 2009

Избавьтесь от скрытой переменной счетчика и просто переберите Request.Form.Keys, ища ветку *. Затем вы просто обработаете любые переменные формы, начинающиеся с ветви.

class Branch { public string Name; public string Title; }

void OnLoad(EventArgs e) {
   base.OnLoad(e);

   var branches = new Dictionary<int, Branch>();
   foreach (string key in Request.Form.Keys) {
     if (!key.StartsWith("branch")) continue;

     int id;
     if (key.StartsWith("branchTitle")) {
       id = int.Parse(key.Substring("branchTitle".Length));
       branches.Ensure(i).Title = Request.Form[key];
     } else if (key.StartsWith("branchName")) {
       id = int.Parse(key.Substring("branchName".Length));
       branches.Ensure(i).Name = Request.Form[key];
     }            
   }
}

// Ensure extension method
T Ensure<K, T>(this Dictionary<K, T> d, K key) where T:new {
   if (!d.ContainsKey(key)) {
      d.Add(key, new T());
   }
   return d[key];
}
0 голосов
/ 25 января 2009

может быть, это ключ? в подчинении сделать ....

$('#branches').each( function (i) { this.id = 'branch' + i } );
...