2010-08-05 78 views
2

我试过了很多不同的可能性来实现我觉得应该是简单的代码执行。我通过​​从服务器加载DOM对象。其中一个加载项目是一个包含日期的输入文本框。我想在我点击输入框时加载jdpicker(一个插件日期选择器)。由于.live().delegate()的行为,即使分别使用.die().undelegate(),我也无法使弹出的日期选择器正常工作。它会弹出,允许我单击窗口中的一个对象,然后立即关闭(我无法浏览数月,没有关闭窗口的年份),或者弹出窗口,然后每次后续点击都会重新执行生成多个实例的代码日期选择器。点击事件后冒泡jQuery .delegate()或.live()

我试过.live().delegate().one()的不同组合,但没有运气。我已经在主窗口中测试了日期选择器,并知道它在那里工作正常。我可以发布代码,但我不确定我做出的十个不同尝试中的哪一个会是最好的例子。我可以展示我最新的尝试。

有没有人有这样的合适的例子?谢谢!


更新

我编辑的代码如下:

$("#edit-entry").load("/edit/", { id:id }, function(){ 
       $('.jdpicker').one('click', function(){ 
        $(this).jdPicker(); 
       }); 
}); 

这是成为完整的答案铰链。日期选择器不再调用多个实例,这很好,但我仍然无法导航它的控件(月,年选择)。如果我点击下个月,它会加载并关闭。下次我点击它时,它会在下个月重新打开。所以,它确实有效,但肯定不合意。有什么建议么?

回答

0

你只是不能用“live”或“delegate”来做到这一点。事实上,你需要在“.load()”成功后明确地应用你的插件初始化。

编辑 —您所做的更改可能不起作用。以下是您的英文代码:

“从URL中获取内容'/ edit /'并将其存入ID为'edit-entry'的元素中,当接收到内容时,绑定一次事件处理程序添加到所有具有类'jdpicker'的元素的“click”函数中。在该事件处理程序中,为元素设置'jdPicker'功能。

相反,你应该做的只是直接调用jdPicker设置,而不是设置它,以便用户必须先点击元素。

$("#edit-entry").load("/edit/", { id:id }, function(){ 
    $('.jdpicker').each(function(){ 
     $(this).jdPicker(); 
    }); 
}); 
+0

现在你提到它很有趣,因为你的评论把我带回了我开始的地方。我是新手,所以一切都是我第一次。我采纳了您的建议,但仍然存在一个小问题...请参阅上面的我的编辑。谢谢! – ionalchemist 2010-08-05 03:45:18

+0

太棒了,使用.each并不是我以前看过的东西。它表现得比以前好,但我仍然无法导航。我认为可能存在与我正在使用的插件有关的错误。当我选择一个类元素“jdpicker”时,弹出窗口打开,但下一次点击关闭它,无论点击发生在哪里。我可以点击导航箭头,只要它在可见窗口中,我可以点击一个新的日期,或者我可以点击主窗口....每秒钟一次点击关闭窗口,但只有当代码已被动态加载...? – ionalchemist 2010-08-05 13:17:01

+0

尽管如此,非常感谢! – ionalchemist 2010-08-05 13:17:27