#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: функция (событие, пользовательский интерфейс)