【问题标题】:Trigger textbox bubble event on date change在日期更改时触发文本框气泡事件
【发布时间】:2019-04-08 12:12:32
【问题描述】:

 $(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。

现在我在 td 中有 datetimepicker。 我通过单击日期选择器并保存相同的日期来遇到问题绑定日期,因为它会触发 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
        });
    }

现在,问题是它只涉及生成行功能,但没有实现逻辑。我猜它没有捕捉到它。你能帮忙吗?

我想要的是从日期选择器中选择日期并同时生成行。

【问题讨论】:

    标签: jquery event-bubbling event-capturing


    【解决方案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>

    【讨论】:

    • 您能帮我解决我的更新问题吗?
    • 您正在绑定到单击处理程序中的单击。这真的是你想要做的吗?此外,您的标记中没有 ID 为 tblMatrix_90_2866 的元素可绑定。
    • tblMatrix_90_2866 是表 ID,是的,我有标签,在其他单元格中的下拉列表,我使用点击处理程序将数据输入到控件并生成行
    • 我认为如果它解决了您最初的问题并将任何进一步的问题作为他们自己的问题发布,我认为您接受答案是公平的。如果没有将您的代码视为展示您遇到的问题的完整工作示例,那么无论如何都没有什么可以帮助您的。
    • 我创建了类似的样本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多