За последние 24 часа нас посетили 30587 программистов и 1801 робот. Сейчас ищут 1008 программистов ...

Безусловный переход или как оформить цикл

Тема в разделе "JavaScript и AJAX", создана пользователем qwert_ukg, 16 июн 2011.

  1. qwert_ukg

    qwert_ukg Активный пользователь

    С нами с:
    20 июл 2010
    Сообщения:
    387
    Симпатии:
    0
    Адрес:
    Алмата
    Привет друг!
    Есть две таблицы, прайс и корзина, нужно наладить добавление в корзину. Помоги))
    Проблема в том в цикле перебора строк корзины идет сравнение если новая строка = текущей то - обновить, иначе - добавить, но ведь может быть так что 1 строка не ровна новой - тогда - добавить а вторая равна и тут - обновить, а ведь так не должно быть. То есть мне надо чтобы если в корзине нет совпадений - добавить, есть - обновить.
    [js]$.each( $("#zakaz tbody").find("tr"), function(){
    if($(this).attr("name") == data.id){
    id =parseInt($(this).children().html());
    oTable2.fnUpdate( [id, data.name, data.cost, data.selected, 'update'], (id-1), 0);
    $(this).attr("name",data.id);
    return false;
    }
    else{
    oTable2.fnAddData([(add_id+1), data.name, data.cost, data.selected, 'new']);
    $(this).attr("name",data.id);
    return false;
    }
    });[/js]

    Решение у меня есть но в JS такова оператора нет(

    [js]$.each( $("#zakaz tbody").find("tr"), function(){
    if($(this).attr("name") == data.id){
    id =parseInt($(this).children().html());
    oTable2.fnUpdate( [id, data.name, data.cost, data.selected, 'update'], (id-1), 0);
    $(this).attr("name",data.id);
    goto метка1;
    }
    });
    oTable2.fnAddData([(add_id+1), data.name, data.cost, data.selected, 'new']);
    $(this).attr("name",data.id);
    метка1;[/js]

    подскажи как это все обернуть
     
  2. zebra

    zebra Активный пользователь

    С нами с:
    11 июн 2011
    Сообщения:
    16
    Симпатии:
    0
    Для каждого tr ещё раз проходить по циклу и считать есть ли совпадения
     
  3. qwert_ukg

    qwert_ukg Активный пользователь

    С нами с:
    20 июл 2010
    Сообщения:
    387
    Симпатии:
    0
    Адрес:
    Алмата
    можно поподробней
     
  4. zebra

    zebra Активный пользователь

    С нами с:
    11 июн 2011
    Сообщения:
    16
    Симпатии:
    0
    Можно так сделать : просто подсчитываем количество одинаковых `name`. Если совпадение одно, то добавляем, если больше, то обновляем.
    Код (Text):
    1.  
    2.                       var o = {};
    3.                       $.each( $("#zakaz tbody").find("tr"), function(){
    4.                          if( $(this).attr('name') in o )
    5.                          {
    6.                              o[ $(this).attr('name')]++;
    7.                              return true;
    8.                          }
    9.                          o[ $(this).attr('name')] = 1;
    10.                       });
    11.                      
    12.                       $.each( $("#zakaz tbody").find("tr"), function(){
    13.                           var is_new = (o[$(this).attr('name')] == 1) ? true : false;
    14.                           if(is_new)
    15.                           {
    16.                               //add
    17.                           }
    18.                           else
    19.                           {
    20.                               //update
    21.                           }
    22.                        
    23.                      });
     
  5. qwert_ukg

    qwert_ukg Активный пользователь

    С нами с:
    20 июл 2010
    Сообщения:
    387
    Симпатии:
    0
    Адрес:
    Алмата
    сделал так: если обновилось то upd=1, а вставка при условии что upd!=1
    [js]$.each( $("#zakaz tbody").find("tr"), function(){
    if($(this).attr("name") == data.id){
    id =parseInt($(this).children().html());
    oTable2.fnUpdate( [id, data.name, data.cost, data.selected, 'update'], (id-1), 0);
    $(this).attr("name",data.id);
    upd = 1;
    return false;
    }
    });
    if (upd != 1){
    oTable2.fnAddData([(add_id+1), data.name, data.cost, data.selected, 'new']);
    $("#zakaz tbody tr:last-child").attr("name",data.id);
    }
    upd=0;[/js]
     
  6. zebra

    zebra Активный пользователь

    С нами с:
    11 июн 2011
    Сообщения:
    16
    Симпатии:
    0
    А так у вас 1 id )) Я то думал куча будет. Есть вариант по короче
    Код (Text):
    1.  
    2. var size = $('#zakaz tr[name=' + data.id + ']').length;
    3. if( size > 1)
    4.  {
    5.    // update
    6. }
    Ну и на 0 проверить )