我有一些关于让 javascript 在对话框中正确触发的问题。
下面是我目前用来加载对话框的 scripts.js 中的代码
function LoadDialog(url, title) {
var DialogBox = $('<div class="dialog-container"></div>').dialog({ modal: true, autoOpen: false, resizeable: true }).dialog({ width: 500, height: 'auto' });
DialogBox.html('<div class="ajax-load"><img src="/Content/loading.gif" alt="loading"></div>').dialog({ buttons: null, title: 'Loading..' });
DialogBox.dialog('open').load(url, function () {
DialogBox.dialog({ title: title, Buttons: null, position: 'center', close: function (ev, ui) { $(this).dialog("destroy"); } });
});
}
$(function () {
$('.as-dialog').click(function (e) { LoadDialog($(this).attr('href'), $(this).attr('title')); return false; });
});
尽管默认情况下对话框内不会触发任何 javascript 代码。例如,我将一个带有不显眼验证的小表单加载到对话框中。没有身体、头部等,只有一个容器 div 和表单本身。默认情况下,验证不起作用,如果我在 script.js $(function(){}) 下为表单添加事件处理程序,它不会触发。如果我添加以下 js 引用和要与表单一起加载的代码块,则可以解决一个问题:
<script src="/Scripts/libs/jquery.validate.min.js"></script>
<script src="/Scripts/libs/jquery.validate.unobtrusive.js"></script>
<script type="text/javascript">
$(function () {
$('#form_Create').submit(function (e) {
e.preventDefault();
});
});
</script>
关于上述代码的不起作用是验证将始终有效,但如果我打开对话框,关闭它,然后再次打开它,preventdefault 将停止工作并且表单将发布。这可能是脚本问题的多重负载还是什么?虽然如果放在scripts.js中没有“准备好的文档”代码在对话框中工作(尽管标准javascript函数工作),但我真的没有其他选择。有没有更好的方法在动态加载的文件中使用 javascript,或者我必须将整个表单放在父页面中才能可靠地处理它们?关于你应该如何处理这个问题的任何意见?