Приращение номера jquery с помощью .each () - PullRequest
1 голос
/ 20 апреля 2011

как увеличить идентификатор с помощью функции .each ().

$("input:checked").each(function(){
var counter = $(this).length();
var id_bookslot = data; //<-- increment id +1
var treatment_type = $(this).closest("div").attr("id");
var id_treatment = $(this).attr("class");
$.post("include/get_booking.php?insert", {id_bookslot: id_bookslot,id_treatment:id_treatment,treatment_type:treatment_type});
});

допустим, есть 3 флажка! поэтому идентификатор будет увеличиваться до 3 (1,2,3).

Я забыл упомянуть var id_bookslot = data. data это идентификатор, который я получаю из базы данных. допустим, он начинается с 1234. и каждый раз, когда генерируется .each (), он будет увеличиваться на 1. 1234, 1235, 1236

Ответы [ 4 ]

6 голосов
/ 20 апреля 2011

Метод each () позволяет использовать индекс элемента.Вероятно, это лучший способ сделать это.

$("input:checked").each(function( index ){
    var id_bookslot = index + 1; //<-- increment id +1
    var treatment_type = $(this).closest("div").attr("id");
    var id_treatment = $(this).attr("class");
    $.post("include/get_booking.php?insert", {id_bookslot: id_bookslot,id_treatment:id_treatment,treatment_type:treatment_type});
});

Я добавил +1, поскольку индекс - это индекс 0, и вы, кажется, хотите, чтобы он начинался с 1.

3 голосов
/ 20 апреля 2011

Если ваша цель - установить post для каждого флажка и указать индекс или сглаживание, each даст вам индекс, который вы можете использовать (также, не пишите $(this) повторно, это расточительно):

$("input:checked").each(function(index) {
  var $this = $(this);
  var id_bookslot = data + index + 1;          // <== Using the index here
  var treatment_type = $this.closest("div").attr("id");
  var id_treatment = $this.attr("class");
  $.post("include/get_booking.php?insert", {
      id_bookslot:    id_bookslot,
      id_treatment:   id_treatment,
      treatment_type: treatment_type
    }
  );
});

Также обратите внимание, что $(this).length всегда будет 1, но вы все равно не использовали свою переменную counter, поэтому я просто удалил ее. Если вы используете его, но просто не указали код, то есть:

var checked = $("input:checked");
checked.each(function(index) {
  var $this = $(this);
  var id_bookslot = data + index + 1;          // <== Using the index here
  var treatment_type = $this.closest("div").attr("id");
  var id_treatment = $this.attr("class");
  $.post("include/get_booking.php?insert", {
      id_bookslot:    index,
      id_treatment:   id_treatment,
      treatment_type: treatment_type
    }
  );
});

... и используйте checked.length для своей переменной counter.

2 голосов
/ 20 апреля 2011

Вам бы пришлось переместить переменную за пределы замыкания:

var id_bookslot = 0;

$('input:checked').each(function(){
    id_bookslot++;
    // The rest of your code
});

Хотя это может сработать, мне всегда это кажется хакерским.Возможно, вы захотите подумать о другом более чистом способе достижения вашей цели (например, использовать традиционный цикл for, чтобы у вас был доступный текущий индекс).

1 голос
/ 20 апреля 2011

Используйте замыкание:

var id_bookslot = 0;
$("input:checked").each(function() {

   id_bookslot++;

   var treatment_type = $(this).closest("div").attr("id");
   var id_treatment = $(this).attr("class");

   $.post("include/get_booking.php?insert", {
     id_bookslot:    id_bookslot,
     id_treatment:   id_treatment,
     treatment_type: treatment_type
   });
});

Обратите внимание, что я удалил вашу переменную count, которая всегда была 1 ($(this) внутри обратного вызова является отдельным элементом в итерации) и которая никогда не использовалась.

...