jQuery日期选择器和类分配

时间:2012-10-19 23:00:05

标签: javascript jquery datepicker

我正在使用默认的jquery的日期选择器,它是通过将dp类分配给input元素来触发的。 如果我在html中设置元素的类,它工作正常,但如果我使用js(dp)分配document.getElementById(eleId).className = 'dp';类,则当用户单击输入时不会触发日期选择器。 有什么想法吗?

2 个答案:

答案 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,之后将类分配给元素。