jQuery datepicker只能工作一次,第二次不显示

ASP.NET MVC3 / jQuery 1.9.1 / jQuery UI 1.10.2

我有一个页面,在单击Ajax.ActionLink后打开模态对话框.在这个对话框中,我有一个输入字段和一个与之关联的日期选择器.当我第一次打开对话框时,我可以单击datepicker按钮(或在关联的输入字段内,以便它获得焦点,showOn设置为两者),并且datepicker按预期显示.我可以,当模态对话框打开时,按照我想要的频率执行,每次都会显示日期选择器.当我关闭模态对话框时(通过附加的$(“ui-widget-overlay”).单击(function(){…});然后再次打开它,无论我是否尝试,datepicker都不再有效单击按钮或关联的输入字段.

我尝试调试jQuery代码,并且两次运行的代码行都是相同的(即使第二次打开对话框时没有出现datepicker,也会触发jQuery方法)在调试器中.我完全被难倒了,this post中描述的方法仅在第一次打开对话框时显示日期选择器方面有所帮助. Another post似乎只与误解showOn设置如何工作有关.

我还试图通过$(“#datepicker”)来破坏日期选择器.datepicker(“destroy”);关闭对话框时 – 无济于事.有任何想法吗?

更新

在“呼叫页面”上:

$(document).ready(function () {
    $("#popupDialog").dialog(
    {
        autoOpen: false,modal: true,open: function()
        {
            $("ui-widget-overlay").click(function()
            {
                $("#popupDialog").dialog("close");
            }
        }
    });
});
[...]
@Ajax.ActionLink( "Some text","Action","Controller",new AjaxOptions {
    HttpMethod = "GET",UpdateTargetId = "popupDialog",InsertionMode = InsertionMode.Replace,OnSuccess = "openPopup()"
})
[...]
function openPopup()
{
    $("popupDialog").dialog("open");
}
[...]
<div id="popupDialog" style="display: none;"></div>

控制器动作非常简单,如下所示:

public ActionResult Action()
{
    MyActionModel myActionModel = new MyActionModel();
    return PartialView( myActionModel );
}

解决方法

在进行了更多调试并尝试跟踪jQuery事件之后,我测试了jQuery UI 1.9.2是否存在问题,但它没有.然后我比较了相关的datepicker代码行,这些代码行没有涉及太多的实际更改.

总而言之,上面我的问题中描述的问题可以通过将一行代码从1.10.2更改为1.9.2中的内容解决

1.10.2造成问题

/* Initialise the date picker */
if (!$.datepicker.initialized) {
    $(document).mousedown($.datepicker._checkExternalClick);
    $.datepicker.initialized = true;
}

1.9.2.版本,按预期工作

/* Initialise the date picker */
if (!$.datepicker.initialized) {
    $(document).mousedown($.datepicker._checkExternalClick)
        // !!!!!!!!!!
        // The next code line has to be added again so that the date picker
        // shows up when the popup is opened more than once without reloading
        // the "base" page.
        // !!!!!!!!!!
        .find(document.body).append($.datepicker.dpDiv);
    $.datepicker.initialized = true;
}

我仍然不确定为什么这种行为存在,但它似乎是一个相对罕见的星座.注意:在打开弹出对话框(或通过AJAX请求PartialView)后,我没有“重新初始化”日期选择器,因此将单个脚本源作为_Layout.cshtml的一部分就足够了.希望这有助于其他人.

相关文章

jQuery插件的种类 1、封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进...
扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间。 入门 编写一个jQuery插件开始于给...
最近项目中需要实现3D图片层叠旋转木马切换的效果,于是用到了jquery.roundabout.js。 兼容性如图: ht...
一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异...
AMD 模块 AMD(异步模块定义,Asynchronous Module Definition)格式总体的目标是为现在的开发者提供一...