Javascript .on()不使用页面加载后添加的HTML

Javascript .on()不使用页面加载后添加的HTML,javascript,jquery,jquery-ui,datepicker,Javascript,Jquery,Jquery Ui,Datepicker,[编辑] [/编辑] 我在一个有日期选择器()的网站上工作 在日期选择器旁边将有一个时间下拉列表,如果用户从日期选择器中选择一个工作日或周末,则需要更改该下拉列表 我写这段代码是为了尝试从datepicker获取ui datepicker week end类,以测试是否是周末,但我根本无法在console.log中获取任何内容 $('.ui-datepicker').on('click', 'tr', function() { console.log($(this)); }); 就目

[编辑]

[/编辑]

我在一个有日期选择器()的网站上工作

日期选择器
旁边将有一个
时间下拉列表
,如果用户从
日期选择器
中选择一个工作日或周末,则需要更改该下拉列表

我写这段代码是为了尝试从datepicker获取
ui datepicker week end
类,以测试是否是周末,但我根本无法在
console.log中获取任何内容

$('.ui-datepicker').on('click', 'tr', function() {
    console.log($(this));
});
就目前而言。我认为问题在于
datepicker
的HTML是与jQuery一起添加的,因此
.on()
不知道它是用来提取类的?我知道
.live()
会这样做,但我相信现在已经贬值了


你知道如何从点击的
td
中获取类吗?

交换语法
on()
应绑定到动态内容最近的静态父级:

$('tr').on('click', '.ui-datepicker', function() {
    console.log($(this));
});
改为

$('.ui-datepicker tr').on('click', function() {
    console.log($(this));
}); 
试试这个:

$(document).on('click', '.ui-datepicker td', function() {
    console.log(this.className);
});

其中,
#date
是静态元素(datepicker),它在页面加载时的文档中可用,并在
.ui datepicker
的td上绑定click事件,然后您可以在日历中获得单击td的类名。

语法良好,但初始化datepicker后可能没有绑定事件,但是以前

确保您正在执行
$('.yourClass').datepicker()
之前的
$('.ui datepicker')。在…

.on()
之前执行
console.log($('.ui datepicker').length)
将告诉您日期选择器是否已初始化

如果它不起作用,那就意味着(但我不这么认为)
.ui datepicker
也是动态的。您必须以家长为目标:

$('.parent').on('click', '.ui-datepicker tr', function(){});

编辑 jQueryUI似乎停止了传播,因此无法绑定单击事件

但它有一个选项,允许在您选择日期时绑定事件:

初始化datepicker时将其传递到option对象中

最好使用它,因为您也可以使用键盘选择日期(所以不会触发单击)


嗯,似乎还不起作用。我想知道现在点击的是
a
而不是
td
?我本以为它会传播。无论如何,上面的内容将绑定到
.ui日期选择器
元素。无论何时单击,您都会收到一条控制台消息。@BenM the
tr
.ui日期选择器的孩子。嗯,只是尝试将console.log更改为一个字符串,只是说“click”,但似乎什么都不想做:
控制台.log($('.ui datepicker').length)
返回
1
,这是个好消息吗?但是我的代码仍然不走运。嗯,我在问题中添加了一个jsFiddle,这是否有帮助?嘿,太好了!它是日志,这是伟大的。但我这样做的原因是为了检查他们是否选择了周末或工作日。那里的日志只记录我的输入字段:(@lukeseager看到这个fiddle:.jQuery UI在函数中传递一个日期对象。恐怕页面加载中没有可供日期选择器使用的静态元素。它只是动态添加到包装的末尾,没有包装在我创建的任何div中。然后你可以委托给文档本身。似乎仍然不想做任何事情。尝试
$(文档)
并尝试了一系列不同的选择器。不确定是怎么回事。