我正在使用默认的jquery的日期选择器,它是通过将dp
类分配给input元素来触发的。
如果我在html中设置元素的类,它工作正常,但如果我使用js(dp
)分配document.getElementById(eleId).className = 'dp';
类,则当用户单击输入时不会触发日期选择器。
有什么想法吗?
答案 0 :(得分: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"
或其他东西代替"body"
。此外,您还需要以某种方式考虑onfocus
。
我建议的是,你可以随处使用jQuery,因为你已经包含它了。例如,您的代码:document.getElementById(eleId).className = 'dp';
很好,但为什么不使用方法addClass
,为什么不使用"#"
选择器呢?像:
$("#" + eleId).addClass("dp");
// and alternatively
$("#" + eleId).removeClass("dp");
使用className
的一个问题是操纵元素的类并不容易。使用.className = "whatever"
覆盖任何以前的className
值 - 当然,您可以考虑到这一点,但是为此更容易使用jQuery。此外,在使用removeClass
时,jQuery可能会也可能不会自动删除元素的任何事件绑定,其中className
不会这样做。如果你要做删除和添加类的事情,它可能会变得混乱。
答案 1 :(得分:0)
分配课程时很重要。您必须在之前分配类,以加载datepicker模块。
否则,datepicker会加载它找到的任何输入,然后停止。如果您在该事件之后分配类,则由于加载器已完成其工作且对任何新项目不感兴趣,因此不会有任何响应。
或者,您可以再次调用datepicker,在之后将类分配给元素。