【发布时间】:2011-11-08 12:22:00
【问题描述】:
我正在创建一个在对话框中使用 jQuery Datepicker 和 Timepicker 的 ASP.NET MVC3 应用程序。代码很简单,就是本地化:
$(document).ready(function () {
$('.datepicker').datepicker({
dateFormat: "dd/mm/yy",
monthNames: ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],
dayNames: ['Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado'],
dayNamesMin:['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'],
});
$('.timepicker').timepicker({
timeOnlyTitle: 'Titulo',
timeText: 'Tempo',
hourText: 'Hora',
minuteText: 'Minuto',
secondText: 'Segundo',
currentText: 'Atual',
closeText: 'Fechar'
});
});
这里没有秘密。
第一次使用日期选择器时可以正常工作。当我第二次使用时,浏览器(任何浏览器)挂起并让我停止执行 jquery-1.6.4.min.js 的脚本。为了重现错误,我只是重新加载整个页面。
我在这里错过了什么?
更新
为模态添加代码:
首先,我配置所有带有 class='modal' 的东西都会有一些基本参数:
$('.modal').dialog({
resizable: false,
draggable: false,
modal: true,
position: 'center',
autoOpen: false
});
然后,我用一些函数扩展了 jQuery。其中一个设置按钮并提交:
$.extend({
modalPopup: function (modal) {
var $modal = $('#' + modal);
var $form = $modal.find('form').first();
$modal.dialog({
buttons: {
"OK": function (e) {
$.validator.unobtrusive.parse($form);
if ($form.valid()) {
$('.ui-dialog button:contains("OK")').button('disable');
$.post($form.attr('action'),
$form.serialize(),
function (data) {
$modal.dialog('close');
$('#maindiv').load(telaAtual);
});
}
},
"Cancelar": function () { $(this).dialog("close"); }
},
open: function () {
$modal.unbind('submit');
$modal.submit(function () {
$modal.parents('.ui-dialog').first().find('.ui-button').first().click();
return false;
});
$(this).find('.ui-dialog :input').first().blur();
}
})
.dialog('open');
}
})
更新
我做了一些研究,发现问题出在 DatePicker 和 Ajax 上。每次进行 ajax 调用时,也许 Datepicker 都会被“双重调用”。与this question 非常相似的东西。但是即使我只是关闭对话框,Datepicker 也会挂起,这意味着问题在第一次 ajax 调用时就开始了。
谁能帮我解决这个问题?可能在某处返回 false 或在创建新的日期选择器之前销毁它。
2012 年 1 月 12 日更新
抱歉耽搁了,伙计们,感谢您的帮助。 此处发布的解决方案均无效。但是,再次感谢大家的帮助。
我发现一个布尔属性 $.datepicker.initialized 在我第一次加载对话框时返回 false,第二次返回 true。现在我可以避免第二次崩溃了。第一个问题解决了。 但我仍然不知道如何“重新初始化”日期选择器,以便在单击文本框时显示它。
仍在寻找重新初始化它的方法。
另外,将 OK 按钮代码更改为此代码并正常工作:
"OK": function (e) {
$.validator.unobtrusive.parse($form);
if ($form.valid()) {
$modal.parents('.ui-dialog').find('button:contains("OK")').button('disable');
$.post($form.attr('action'),
$form.serialize(),
function (data) {
if (submodal) {
carregaParcial(titulo, id);
}
else {
$('#maindiv').html(data);
}
removeModal($modal);
});
}
$form.serialize() 函数已经返回 data 变量中的 html,所以,我只需要获取它的内容并设置为 maindiv 的 HTML .
【问题讨论】:
-
它是挂在所有浏览器中,还是只挂在一个浏览器中?
-
“在对话框中”。您可以在任何对话框之外测试相同的代码吗?
-
在 jQuery 对话框之外,似乎工作正常。
-
然后为我们也包含该代码,问题不在于日期或时间选择器,而在于它们与对话框之间的协作。
-
是同一个代码。 'telaAtual' 变量保存要加载的 URL。 html/view/c# 的代码相同。只是没有对话框。
标签: javascript jquery asp.net-mvc jquery-ui