我正在使用以下代码在我的应用程序中实现Simplemodal:
$(".dialog-link").live('click', function(e) {
e.preventDefault();
$.get($(this).attr('href'),function(data) {
$.modal(data, {onOpen: open, position: ['10%','30%']});
);
});
(仅供参考: onOpen回调只是设置了一些高度)
ajax调用返回的文档(包含在data中)有一些对datepicker等的jquery调用,但是当我的对话框显示datepicker时,datepicker将无法工作。
我知道我可以从onShow回调中打开datepicker,但理想的做法是调用数据中包含的函数,因为每个对话框可以有不同的jquery调用。
例如,有没有办法这样做?
onShow: function(dialog) { dialog.data.my_function(); }
谢谢,迈克尔
发布于 2009-08-08 01:34:08
正如DOM检查可能揭示的那样(firebug总是很方便的……),模式对话框会将外部文档加载到一个div中,去掉<html>
和<head>
标记。它似乎还会导入加载文档中定义的主窗口对象和函数的作用域。
因此,调用一个函数,就好像它在另一个窗口或框架( dialog.data.my_function )的作用域中一样,将不起作用。
相反,对我有效的方法是将外部函数直接绑定到onShow事件。
主文档:
<script type="text/javascript">
$("a.dialog-link").live('click', function(e) {
e.preventDefault();
$.get($(this).attr('href'),function(data) {
$.modal(data, {position: ['10%','30%'], onShow: function(dialog){
external_function()
}});
});
</script>
外部文档(加载到模式框中:)
<html><head><title>bla bla </title>
<script type="text/javascript">
function external_function(){$("#external_content").text("UPDATED!")};
</script>
</head>
<body>
<div id="external_content"> .... </div>
</body>
</html>
希望这能有所帮助:)
发布于 2013-01-18 12:55:59
在@和answer上展开。由于jQuery 1.9中删除了live():
$(document).on("click","a.dialog-link",function(e) {
e.preventDefault();
$.get($(this).attr("href"),function(data) {
$.modal(data, {position: ["10%','30%"], onShow: function(dialog){
external_function()
}});
});
});
https://stackoverflow.com/questions/1248309
复制相似问题