选择动态添加表单的元素
Selecting elements of dynamically added form
我有一个由 Cocoon gem 动态生成的 Rails 表单。我从一个元素开始页面,但很可能会添加更多。
不幸的是,本应应用于它们的 jquery 选择器不起作用。
选择器如下:
$(document.body).on("click", "#datepicker", function() {
$( "#datepicker" ).datepicker({
});
});
我的目标是在单击带有 id datepicker 的输入字段时打开 datepicker。
有趣的是,如果我单击该字段,页面上的第一个表单会显示日期选择器,然后单击其他地方,然后再次单击该字段。
尝试触发事件 blur
,然后在将日期选择器添加到字段后 'focus'。还有一种可能是你有多个 id 为 datepicker
的元素,这是错误的。如果是这种情况,您需要使用 class。在函数中绑定 datepicker
时也使用 this
作为选择器。
$(document.body).on("click", "#datepicker", function() {
$(this).datepicker();
$(this)
.trigger('blur')
.trigger('focus');
});
你可以试试javascript代码,
document.getElementById("datepicker").onclick = function (){
// you onclick code...
$( "#datepicker" ).datepicker({
});
};
你是说你会有多个具有相同 ID 的日期选择器吗? ID 只能用于单个元素,因此请尝试为您的日期选择器提供一个 class,这样应该可以。
id
是定义 id 实体的 HTML 属性,或者用简单的英语来说,就是 HTML 标签的身份。由于具有完全相同标识的两个标签是无稽之谈,因此 id
应该是唯一的。这种情况是如此之多,以至于包含重复 id
的 HTML 被认为是无效的。
因此,您的选择器告诉 jquery 应该搜索具有给定 id
的身份。另一方面,jquery 将搜索该标识,并在找到第一个对应标签时停止搜索。这样做的原因是,如果已经找到唯一标识,则继续搜索它是没有意义的。因此,选择器将找到具有该 id
的第一个标签,并将为它做任何需要做的事情。
其他答案建议您使用 class
。这背后的逻辑是 class
实际上是一个分类,所以它的发现共享一个共同的分类模式,这意味着当找到第一个这样的标签时,搜索将继续。这是一个聪明的想法,但它不是唯一的解决方案。用更笼统的术语来说:你需要有有效的 html 和一个不假定结果是唯一的选择器。
如果您真的更喜欢在这种情况下使用 id,则可以使用 ids sharing a pattern 来做到这一点。请注意,该示例的解决方案不包含主题标签。
此外,每次在给定标签上发出点击时都初始化日期选择器不是一个好主意。每个标签你应该只做一次。
我有一个由 Cocoon gem 动态生成的 Rails 表单。我从一个元素开始页面,但很可能会添加更多。
不幸的是,本应应用于它们的 jquery 选择器不起作用。
选择器如下:
$(document.body).on("click", "#datepicker", function() {
$( "#datepicker" ).datepicker({
});
});
我的目标是在单击带有 id datepicker 的输入字段时打开 datepicker。
有趣的是,如果我单击该字段,页面上的第一个表单会显示日期选择器,然后单击其他地方,然后再次单击该字段。
尝试触发事件 blur
,然后在将日期选择器添加到字段后 'focus'。还有一种可能是你有多个 id 为 datepicker
的元素,这是错误的。如果是这种情况,您需要使用 class。在函数中绑定 datepicker
时也使用 this
作为选择器。
$(document.body).on("click", "#datepicker", function() {
$(this).datepicker();
$(this)
.trigger('blur')
.trigger('focus');
});
你可以试试javascript代码,
document.getElementById("datepicker").onclick = function (){
// you onclick code...
$( "#datepicker" ).datepicker({
});
};
你是说你会有多个具有相同 ID 的日期选择器吗? ID 只能用于单个元素,因此请尝试为您的日期选择器提供一个 class,这样应该可以。
id
是定义 id 实体的 HTML 属性,或者用简单的英语来说,就是 HTML 标签的身份。由于具有完全相同标识的两个标签是无稽之谈,因此 id
应该是唯一的。这种情况是如此之多,以至于包含重复 id
的 HTML 被认为是无效的。
因此,您的选择器告诉 jquery 应该搜索具有给定 id
的身份。另一方面,jquery 将搜索该标识,并在找到第一个对应标签时停止搜索。这样做的原因是,如果已经找到唯一标识,则继续搜索它是没有意义的。因此,选择器将找到具有该 id
的第一个标签,并将为它做任何需要做的事情。
其他答案建议您使用 class
。这背后的逻辑是 class
实际上是一个分类,所以它的发现共享一个共同的分类模式,这意味着当找到第一个这样的标签时,搜索将继续。这是一个聪明的想法,但它不是唯一的解决方案。用更笼统的术语来说:你需要有有效的 html 和一个不假定结果是唯一的选择器。
如果您真的更喜欢在这种情况下使用 id,则可以使用 ids sharing a pattern 来做到这一点。请注意,该示例的解决方案不包含主题标签。
此外,每次在给定标签上发出点击时都初始化日期选择器不是一个好主意。每个标签你应该只做一次。