Удалить дублирующуюся запись в динамически добавляемой строке с помощью автозаполнения jQuery в laravel

#jquery #laravel

#jquery #laravel

Вопрос:

Я работаю с формой, которая добавляет строку и скрипт автозаполнения с помощью jQuery. Они работают нормально, но как я могу удалить дублирующуюся запись? или, может быть, удалить запись, которая уже была выбрана в выпадающем списке опций?

введите описание изображения здесь

вот моя функция для автозаполнения

 public function salesResponse(Request $request){
    $query = $request->get('term','');
    $wh2Summaries=Warehouse2StockSummaries::with('product');

    if($request->type == 'product_code'){
        $wh2Summaries->whereHas('product', function ($q) use ($query) {
            $q->where('product_code', 'LIKE', '%' . $query . '%');
        }); 
    }

    if($request->type=='product_name'){
        $wh2Summaries->whereHas('product', function ($q) use ($query) {
            $q->where('product_code', 'LIKE', '%' . $query . '%');
        }); 
    }

    if($request->type=='product_id'){
        $wh2Summaries->whereHas('product', function ($q) use ($query) {
            $q->where('product_code', 'LIKE', '%' . $query . '%');
        }); 
    }

    $wh2Summaries=$wh2Summaries->get();        
    $data=array();
    foreach ($wh2Summaries as $wh2Summary) {
        $data[]=array(
            'product_code'=>$wh2Summary->product->product_code,
            'name'=>$wh2Summary->product->name,
            'price'=>$wh2Summary->product->price,
            'quantity'=>$wh2Summary->qty_in-$wh2Summary->qty_out,
            'id'=>$wh2Summary->product->id
        );
    }
    if(count($data))
        return $data;
    else
        return [
            'product_code'=>'No product',
            'name'=>'',
            'price'=>'',
            'qty_out'=>'',
            'id'=>''
        ];
} 
  

и вот мой скрипт автозаполнения

 //autocomplete script
$(document).on('focus','.autocomplete_txt',function(){
  type = $(this).data('type');

  if(type =='product_code' )autoType='product_code'; 
  if(type =='product_name' )autoType='name'; 
  if(type =='product_price' )autoType='price'; 
  if(type =='quantity' )autoType='quantity'; 
  if(type =='product_id' )autoType='id'; 

   $(this).autocomplete({
       minLength: 0,
       source: function( request, response ) {
            $.ajax({
                url: "{{ route('searchaSaleItems') }}",
                dataType: "json",
                data: {
                    term : request.term,
                    type : type,
                },
                success: function(data) {
                    var array = $.map(data, function (item) {
                       return {
                           label: item[autoType],
                           value: item[autoType],
                           data : item
                       }
                    });
                    response(array)
                }
            });
       },
       select: function( event, ui ) {
           var data = ui.item.data;
           var limit
           id_arr = $(this).attr('id');
           id = id_arr.split("_");
           elementId = id[id.length-1];
           $('#product_code_' elementId).val(data.product_code);
           $('#product_name_' elementId).val(data.name);
           $('#product_price_' elementId).val(data.price).prop('min', data.price);
           $('#product_id_' elementId).val(data.id);
           $('#quantity_' elementId).prop('max', data.quantity);
           $('#quantity_warning_' elementId).text('You have ' data.quantity-data.quantity ' in your stocks');
       }
   });
});
  

в моем текущем коде я не могу контролировать лимит запасов из-за повторяющихся записей. Пожалуйста, помогите мне и заранее большое вам спасибо!

Обновить, добавить мой скрипт добавления

   var rowCount = 1;

  $('#add').click(function() {
    rowCount  ;
    $('#orders').append(<tr id="row' rowCount '"><td> . ... ....</td></tr> );
});
  

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

1. какая дублирующаяся запись?

2. Привет @Flame, как, например, на моем скриншоте. DWN вводится уже трижды. Мой вопрос в том, как я собираюсь предотвратить это? Спасибо!

3. Я думаю, что правильный путь — выбрать строки вашей формы с помощью jQuery и добавить их коды продуктов в массив. Затем отфильтруйте свой список выбора на основе этого. Что-то вроде var arr = []; $('input[name="product_code"]').each(function() {arr.push($(this).val());});

4. аааа, это имеет смысл @Flame Спасибо, я попробую это сейчас

5. я не могу заставить это работать, я помещаю это, $ (‘#product_code_’ elementId).each(функция() { arr.push($(this).val(data.product_code)); }); внутри select: функция (событие, пользовательский интерфейс)