#jquery #event-bubbling #event-capturing
#jquery #событие-пузырьковое #захват события
Вопрос:
$(document).ready(function () {
var lblupdate = $(".lblupdate");
for (var i = 0; i < lblupdate.length; i ) {
lblupdate[i].addEventListener('click', OnLabelClick);
}
});
function OnLabelClick() {
alert(3);
$('.updatedisplay').addClass("hide");
$('.lblupdate').removeClass("hide");
var inputCtrl = $(this).attr('id').replace("lbl", "DetailDataValueId");
$(this).addClass("hide");
$("#" inputCtrl).removeClass('hide');
$("#" inputCtrl).show();
$(this).parent().find('a').removeClass("hide");
}
function GenerateRow(param1,pram2,param3){
$("#tblMatrix_89_2867").on('click', 'tr:last', function (e) {
var $tr = $(this).closest('.trbar');
var currentRow = $(this).find('td:first').text();
if ($(this).closest('.trbar').is(":last-child")) {
var $clone = $tr.clone(true);
$clone.find(':text').val('');
$clone.find('td').each(function (item) {
$(this).attr("data-rowindex", parseInt(currentRow) 1);
});
$tr.after($clone);
}
});
}
.hide{
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<table id="tblMatrix_89_2867" class="table table-bordered2 table-vmiddle table-sm2 mb-10 table_form_controls pematrix-table">
<thead>
<tr>
<th>
<div class="input-group input-group-outer" style="color:#8e8d8d;font-weight:bold">
Header 1
<span class="input-group-addon p-0">
</span>
</div>
</th>
<th>
<div class="input-group input-group-outer" style="color:#8e8d8d;font-weight:bold">
Header 2
<span class="input-group-addon p-0">
</span>
</div>
</th>
</tr>
</thead>
<tbody>
<tr class="trbar " data-matrixid="0">
<td data-findingid="2867" data-matrixconfigid="89" data-celldefaultvalue="04/10/2019" data-systemid="455" data-rowindex="1" data-columnindex="1" data-matrixdetailid="0" data-isfortextboxofdd="False" data-celldatatype="0" data-celltypeid="3" data-isserialnoadded="False" class="tdbar no-ellipsis " onclick="GenerateRow(89,2867,event);">
<input id="DetailDataValueId_947_2867" style="color:#8e8d8d;font-weight:bold" type="date" value="04/10/2019" onchange="SaveMatrixData(this, '0', 89, 0, '947_2867');" data-rowindex="1" data-columnindex="1" class="form-control input-xs customdatepicker customfield datePicker" autocomplete="off">
</td>
<td data-findingid="2867" data-matrixconfigid="89" data-celldefaultvalue="" data-systemid="455" data-rowindex="1" data-columnindex="2" data-matrixdetailid="0" data-isfortextboxofdd="False" data-celldatatype="0" data-celltypeid="1" data-isserialnoadded="False" class="tdbar no-ellipsis relative" onclick="GenerateRow(89,2867,event);">
<label data-rowindex="1" id="lbl_949_2867" data-columnindex="2" style="color:#8e8d8d;font-weight:bold" class="form-control input-xs ml-2 control-label2 lblupdate">123</label>
<div class="input-group input-group-outer">
<input type="text" id="DetailDataValueId_949_2867" style="color:#8e8d8d;font-weight:bold" class="form-control input-xs txtChildvalue hide updatedisplay" value="" autocomplete="off">
</div>
</td>
</tr>
</tbody>
</table>
У меня есть одна таблица. При нажатии на последний элемент строки я генерирую новую строку в таблице. У меня есть привязка функции Onclick к td
.
Теперь у меня есть datetimepicker в td. У меня возникла проблема с привязкой даты, нажав datepicker и сохранив ее, потому что она запускает функцию td onclick.
Я хочу сначала привязать дату, затем сохранить дату с помощью функции onchange ввода, а затем создать строку.
Любая помощь приветствуется.
<td data-findingid="2866" data-matrixconfigid="2" data-celldefaultvalue="04/08/2019" data-systemid="455" data-rowindex="3" data-columnindex="3" data-matrixdetailid="1788" data-isfortextboxofdd="False" data-celldatatype="0" data-celltypeid="3" data-isserialnoadded="True" class="no-ellipsis relative" onclick="GenerateRow(2,2866);">
<input id="DetailDataValueId_1788_2866" type="text" value="04/08/2019" onchange="SaveMatrixData(this, '0', 2, 46, 1788_2866);" data-rowindex="3" data-columnindex="3" class="form-control input-xs customdatepicker customfield datePicker" autocomplete="off">
</td>
Обновить
Вот моя функция генерации строки:
function GenerateRow(MatrixConfigId, FindingId, e) {
$('#tblMatrix_90_2866').on('click', 'tr:last', function (e) {
//It does not call this part
});
}
Теперь проблема заключается в том, что он генерирует только функцию строки, но не реализует логику. Я думаю, это не захватывает его. Не могли бы вы помочь?
Я хочу выбрать дату из datepicker и одновременно сгенерировать строку.
Ответ №1:
Вы можете передать event
в качестве дополнительного аргумента обработчику события (это работает в разных браузерах, даже в современных браузерах, которые не предоставляют глобальный event
объект) и проверить наличие целевого элемента.
Если пользователь нажал на элемент ввода, вернитесь true
, чтобы позволить браузеру продолжить обычную работу, в противном случае выполните код вставки строки.
(Я изменил input
тип на date
для демонстрационных целей.)
function GenerateRow(row, id, target) {
if (target.tagName === 'INPUT') {
console.log('proceed with date picker');
return true;
}
console.log('would insert row now');
}
<table>
<tr>
<td data-findingid="2866" data-matrixconfigid="2" data-celldefaultvalue="04/08/2019" data-systemid="455" data-rowindex="3" data-columnindex="3" data-matrixdetailid="1788" data-isfortextboxofdd="False" data-celldatatype="0" data-celltypeid="3" data-isserialnoadded="True" class="no-ellipsis relative" onclick="GenerateRow(2,2866,event.target);">
Other row content, click to insert row <input id="DetailDataValueId_1788_2866" type="date" value="04/08/2019" onchange="SaveMatrixData(this, '0', 2, 46, 1788_2866);" data-rowindex="3" data-columnindex="3" class="form-control input-xs customdatepicker customfield datePicker" autocomplete="off">
</td>
</tr>
</table>
Комментарии:
1. Не могли бы вы помочь мне с моим обновлением, о котором идет речь?
2. Вы привязываетесь к щелчку в обработчике щелчков. Это действительно то, что вы пытаетесь сделать? Также
tblMatrix_90_2866
в вашей разметке нет элемента с идентификатором для привязки.3. tblMatrix_90_2866 — это идентификатор таблицы, и да, у меня есть метка, выпадающий список в другой ячейке, для которой я использую обработчик щелчков для ввода данных в элементы управления и создания строки
4. Я думаю, было бы справедливо, если бы вы приняли ответ, если бы он решил вашу первоначальную проблему и опубликовал любые дополнительные вопросы как свои собственные. В любом случае, если вы не видите свой код как полностью рабочий пример, демонстрирующий проблемы, с которыми вы сталкиваетесь, в любом случае, не так много нужно сделать, чтобы помочь вам.
5. Я создал аналогичный образец.