我正在使用通过将dp
类分配给输入元素来触发的默认 jquery 日期选择器。如果我在 html 中设置元素的类,它工作正常,但如果我dp
用 js ( document.getElementById(eleId).className = 'dp';
) 分配类,则当用户单击输入时不会触发日期选择器。任何想法?
2 回答
那是因为当你将datepicker
事件绑定到你的元素时(通过选择器,可能$(".dp")
,它只绑定到在那个时间点找到的那些。之后的任何时候,就像你说的那样,元素可能会获得类(甚至失去它)。我的建议是做这样的事情:
<div id="container">
<!-- Your elements that may or may not have the class "dp" -->
</div>
<script type="text/javascript">
$("#container").on("click", "dp", function () {
$(this).datepicker('destroy').datepicker({showOn: 'both'}).focus();
});
</script>
当然,您可以将绑定放入其中document.ready
,并且可以更改传递给的选项datepicker
。如果你不能缩小范围"#container"
,你可以使用or代替。"body"
此外,您还需要以onfocus
某种方式考虑。
不过,我建议您尽可能使用 jQuery,因为您已经包含了它。例如,您的代码:document.getElementById(eleId).className = 'dp';
很好,但为什么不使用方法addClass
,为什么不使用"#"
选择器?喜欢:
$("#" + eleId).addClass("dp");
// and alternatively
$("#" + eleId).removeClass("dp");
使用的一个问题className
是操作元素的类并不容易。使用会.className = "whatever"
覆盖任何先前className
的值 - 当然,您可以考虑这一点,但使用 jQuery 会更容易。此外,在使用 时removeClass
,jQuery 可能会也可能不会自动删除元素的任何事件绑定,而 whereclassName
不会这样做。如果您要执行诸如删除和添加类之类的操作,则可能会变得一团糟。
何时分配课程很重要。您必须在加载 datepicker 模块之前分配类。
否则,日期选择器会加载它找到的任何输入,然后停止。如果您在该事件之后分配类,则不会有任何响应,因为加载器已完成其工作并且对任何新项目不感兴趣。
或者,您可以在将类分配给元素后再次调用日期选择器。