选择动态添加表单的元素

时间:2016-03-19 10:59:58

标签: javascript cocoon-gem

我有一个由Cocoon gem动态生成的Rails表单。我用一个元素开始页面,但很可能会添加更多。

不幸的是,应该应用它们的jquery选择器不起作用。

选择器如下:

$(document.body).on("click", "#datepicker",       function() {
    $( "#datepicker" ).datepicker({
    });
});

我的目的是在点击id为datepicker的输入字段时打开datepicker。

有趣的是,如果单击该字段,页面上的第一个表单将显示datepicker,然后单击其他位置,然后再次单击该字段。

4 个答案:

答案 0 :(得分:2)

您是说您将拥有多个具有相同ID的日期选择器?一个ID只能在一个元素上使用,所以请尝试给你的datepickers一个类,这应该有效。

答案 1 :(得分:1)

尝试触发事件$scope.$apply(),然后重点关注'将datepicker添加到字段后。还有一个机会,你有多个标识为blur的元素,这是错误的。如果是这种情况,您需要使用类。在绑定函数中的datepicker时,也使用this作为slector。

datepicker

答案 2 :(得分:1)

你可以试试javascript代码,

document.getElementById("datepicker").onclick = function (){
    // you onclick code...
    $( "#datepicker" ).datepicker({
    });
};

答案 3 :(得分:1)

id是用于定义id-entity的HTML属性,或者用简单的英语表示HTML标记的标识。由于两个标签具有相同的标识是无稽之谈,因此id应该是唯一的。这就是包含重复的id的HTML被视为无效的情况。

因此,您的选择器告诉jquery应该搜索具有给定id的标识。另一方面,jquery将搜索该标识,并在找到第一个相应标记时停止搜索。这样做的原因是,如果已找到它,继续搜索唯一标识是没有意义的。因此,选择器将找到具有id的第一个标记,并将执行任何需要为其执行的操作。

其他答案建议您使用class。这背后的逻辑是class实际上是一种分类,因此它的发现共享一种共同的分类模式,这意味着当找到第一个这样的标记时,搜索将继续进行。这是一个聪明的想法,但它不是唯一的解决方案。换句话说:你需要有一个有效的html和一个不假设发现是唯一的选择器。

如果您真的更喜欢在这种情况下使用id,则可以使用ids sharing a pattern执行此操作。请注意,示例的解决方案不包含主题标签。

此外,每次在给定标签上发出点击时,初始化一个日期选择器并不是一个好主意。你应该每个标签只做一次。