0

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

4

2 回答 2

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不会这样做。如果您要执行诸如删除和添加类之类的操作,则可能会变得一团糟。

于 2012-10-19T23:06:01.387 回答
0

何时分配课程很重要。您必须在加载 datepicker 模块之前分配类。

否则,日期选择器会加载它找到的任何输入,然后停止。如果您在该事件之后分配类,则不会有任何响应,因为加载器已完成其工作并且对任何新项目不感兴趣。

或者,您可以在将类分配给元素后再次调用日期选择器。

于 2012-10-19T23:08:05.283 回答