Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 1 год назад.
у меня есть перечень товаров в таблице, каждый в отдельной строке. Вот таким селектором
function getNewSums(data = null){
$("input[name*='product_count_bad'], [name*='variant']").on('input', function(){
var product_id = + $(this).data('id');
var all_count = + $('#all_count_'+product_id).html();
var bad_count = parseInt($('input[name="Product['+product_id+'][product_count_bad]"][data-id="' + product_id + '"]').val());
var variant = $("#s_"+product_id+"_variants option:selected").text();
var variant_code = +($("#s_"+product_id+"_variants option:selected").val());
var provider_price = data ? data.ops[product_id]['bill_price'] : + $('#bill_price_'+product_id).html();
var client_price = data ? data.ops[product_id]['client_price'] : + $('#client_price_'+product_id).html();
var fee_seller = data ? data.ops[product_id]['fee_seller'] : + $('#fee_seller_'+product_id).html();
var fee_service = data ? data.ops[product_id]['fee_service'] : + $('#fee_service_'+product_id).html();
var product_summ_cl = + ((all_count * client_price).toFixed(2));
if(isNaN(bad_count)){bad_count=0}
if(isNaN(bad_count)){
$('#new_summ_cl_'+product_id).val('');
$('#new_summ_pr_'+product_id).val('');
$('#new_fee_seller_'+product_id).val('');
$('#new_fee_service_'+product_id).val('');
} else {
//если недовоз или брак, то запрещаем вводить bad_count больше, чем all_count
if((variant == variants[1] || variant == variants[2]) && bad_count > all_count){
bad_count = all_count;
$('input[name="Product['+product_id+'][product_count_bad]"][data-id="' + product_id + '"]').val(bad_count);
}
var val = {
'product_count_bad':bad_count,
'variant': variant_code,
'bill_price':provider_price,
'client_price':client_price,
'fee_seller':fee_seller,
'fee_service':fee_service,
'product_summ_cl':product_summ_cl
};
console.log(product_id);
console.log(val);
$.ajax({
url: '/reclamation-product/get-new-summ',
method: "POST",
dataType: 'json',
async : false,
data: {'val': val},
headers: {'X-CSRF-TOKEN': getToken()},
success: function (result) {
if (result) {
changeRowSumms(result, product_id);
changeTotalSumms();
}
}
});
if (variant == variants[2]) {showFields(product_id);} else {hideFields(product_id);}
$('input[name = "Product['+product_id+'][comment]"]').on('input', function(){
if ($(this).val().length > 1){
$('#save_button').prop('disabled', false);
$('#send_button').prop('disabled', false);
}
});
}
});
}
я получаю, вернее, я хотел бы получить ту строку с товаром, в которой произошло событие input. Потом я с ней что-то делаю. Как видно id товара я заранее не знаю и получаю его после события input. Загвоздка в том, что код, который потом выполняется, столько раз, сколько товаров в таблице.
отдельно взятая <tr>
у меня вот такая:
<tr id="tr1_196025">
<td>1<input type="hidden" name="Product[196025][order_id]" value="1916"><input type="hidden" name="Product[196025][client_id]" value="2875"><input type="hidden" name="Product[196025][provider_id]" value="1909"><input type="hidden" name="Product[196025][seller_id]" value="1"><input type="hidden" name="Product[196025][product_id]" value="196025"><input type="hidden" name="Product[196025][product_name]" value="А5/12 кл. 1В BRAWL STARS, тетрадь учен."><input type="hidden" name="Product[196025][product_count_all]" value="250"><input type="hidden" name="Product[196025][product_count_confirm]" value="0"><input type="hidden" name="Product[196025][product_summ_pr]" value="593.675"><input type="hidden" name="Product[196025][currency_code_pr]" value="980"><input type="hidden" name="Product[196025][product_summ_cl]" value="617.5"><input type="hidden" name="Product[196025][currency_code_cl]" value="980"><input type="hidden" name="Product[196025][fee_seller]" value="6.175"><input type="hidden" name="Product[196025][fee_service]" value="12.35"><input type="hidden" name="Product[196025][product_photo]"><input type="hidden" name="Product[196025][status]" value="1"><input type="hidden" name="Product[196025][created_at]" value="1604660408"><input type="hidden" name="Product[196025][updated_at]" value="1604660408"><input type="hidden" name="Product[196025][sent_at]"><input type="hidden" name="Product[196025][bill_price]" value="2.37470"><input type="hidden" name="Product[196025][client_price]" value="2.47"></td>
<td>196025</td>
<td></td>
<td><a href="/product/196025-a512-kl-1v-brawl-stars-tetrad-ucen" target="_blank">А5/12 кл. 1В BRAWL STARS, тетрадь учен.</a></td>
<td id="all_count_196025">250</td>
<td><select id="s_196025_variants" name="Product[196025][variant]" data-id="196025">
<option value="1">недовоз</option>
<option value="2">брак</option>
<option value="0">лишнее</option>
</select></td>
<td><input type="text" name="Product[196025][product_count_bad]" style="width: 100%;" data-id="196025" onkeyup="this.value = this.value.replace(/[^\d]/g,'');"></td>
<td id="bill_price_196025">2.37470</td>
<td id="summ_pr_196025">593.675</td>
<td><input type="text" id="new_summ_pr_196025" name="Product[196025][new_summ_pr]" readonly="" style="width: 100%; background-color: #eee; height: 27px; border: thin solid #ccc; padding: 2px; text-align: center;" data-sname="summ_pr"></td>
<td id="client_price_196025">2.47</td>
<td id="summ_cl_196025">617.5</td>
<td><input type="text" id="new_summ_cl_196025" name="Product[196025][new_summ_cl]" readonly="" style="width: 100%; background-color: #eee; height: 27px; border: thin solid #ccc; padding: 2px; text-align: center;" data-sname="summ_cl"></td>
<td id="fee_seller_196025">1</td>
<td><input type="text" id="new_fee_seller_196025" name="Product[196025][new_fee_seller]" readonly="" style="width: 100%; background-color: #eee; height: 27px; border: thin solid #ccc; padding: 2px; text-align: center;" data-sname="fee_seller"></td>
<td id="fee_service_196025">3</td>
<td><input type="text" id="new_fee_service_196025" name="Product[196025][new_fee_service]" readonly="" style="width: 100%; background-color: #eee; height: 27px; border: thin solid #ccc; padding: 2px; text-align: center;" data-sname="fee_service"></td>
</tr>
Соответственно вопрос: как не выполнять код один раз для конкретного товара?
код, который потом выполняется, столько раз, сколько товаров в таблице.
Значит вызов кода
$("input[name*='product_count_bad'], [name*='variant']").on('input', function() {
var product_id = + $(this).data('id');
...
}
генерится на каждую строчку. Нужно делать это только один раз.
Код
$('input[name = "Product['+product_id+'][comment]"]').on('input', function() {
if ($(this).val().length > 1) {
$('#save_button').prop('disabled', false);
$('#send_button').prop('disabled', false);
}
});
навешивает новый обработчик каждый раз, когда вызывается функция getNewSums
. Представляете сколько там в конце концов будет этих обработчиков?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я хочу что бы метод DistributeTrucks выполнялся параллельно, но при этом запуск таймера должен происходить только тогда, когда все задачи выполнятьсяСейчас...
После создания объекта Excel не удается его закрыть: он также висит диспетчере задач:
От пользователя приходит некий код, и он сравнивается с форматом кода для каждой конкретной страны(он может быть разным), и если его можно...