gpt4 book ai didi

javascript - 动态添加到 DOM 的对象不响应 jQuery 事件

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:41 25 4
gpt4 key购买 nike

我有一个表格,我正在向其中动态添加行,每一行都有 2 个单元格,其中一个单元格包含一个输入字段,我计划在其中使用 DatePicker UI 来选择一个日期。当我添加新行、单元格和所有内容时,问题就出现了,但是输入字段在我单击它时不知何故不显示 DatePicker。阅读周围我了解到我应该使用“事件委托(delegate)”,因为新元素不是从一开始就加载的。但是对于我的一生,我一直无法理解如何去做,如果有人能指出我正确的方向,那就太好了。谢谢

我目前得到的代码:

<html>
<head>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery- ui.css">
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<script>
$(document).ready(function() {
$( ".datepicker" ).datepicker();
$( "#TheTable" ).on("change",".datepicker",function(){
$( this ).datepicker( "option", "dateFormat", "yy-mm-dd" );
});
});

function addRow() {
var table = document.getElementById("TheTable");
var row = table.insertRow(-1);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
cell1.innerHTML='Date';
cell2.innerHTML='<input type="text" class="datepicker"/>';
}
</script>
</head>
<body>
<table name="MyTable" id="TheTable">
<tr>
<td>Date</td>
<td><input type="text" class="datepicker" /></td>
</tr>
<tr>
<td>Date</td>
<td><input type="text" class="datepicker" /></td>
</tr>
</table>
<input type="button" onClick="return addRow()" value ="Add Another Date">
</body>
</html>

最佳答案

$( "#TheTable" ).on("change",".datepicker",function() {

这应该有效。

.on() 通过监听 parent element 的事件冒泡(see here for explanation of bubbling - 第一段)来工作,因此新元素触发的事件冒泡取决于正在收听的 parent 。

作为旁注,我想提一下,听取所需元素的最低公共(public)父级是个好主意,否则 jQuery 将计算不必要的事件。

参见 jQuery docs for .on()

以下是 .on() 文档的要点:

.on( events [, selector ] [, data ], handler(eventObject) )

大多数浏览器事件从文档中发生的最深、最内层的元素(事件目标)冒泡或传播,一直到正文和文档 元素。在 Internet Explorer 8 及更低版本中,changesubmit 等一些事件本身不会冒泡,但 jQuery 修补这些事件以冒泡并创建一致的跨浏览器行为。

如果 selector 被省略或为空,则事件处理程序称为直接直接绑定(bind)。每次在选定元素上发生事件时都会调用处理程序,无论它是直接发生在元素上还是从后代(内部)元素冒泡。

当提供选择器时,事件处理程序被称为委托(delegate)。当事件直接发生在绑定(bind)元素上时,不会调用处理程序,而只会为与选择器匹配的后代(内部元素)调用。 jQuery 将事件从事件目标冒泡到附加处理程序的元素(即,从最内层到最外层的元素),并为该路径上与选择器匹配的任何元素运行处理程序。

事件处理程序只绑定(bind)到当前选中的元素;它们必须在您的代码调用 .on()

时存在于页面上

关于javascript - 动态添加到 DOM 的对象不响应 jQuery 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21100128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com