这是 jquery 大师的一个:
这有效:
$(function (){
$("#<?= $gridArr['event_id'] ?> .gallery-add").each(function() {
var $dialog = $("<div></div>");
var $link = $(this).one("click", function() {
$dialog
.load($link.attr("href"))
.dialog({
modal: true,
width: 520,
height: 180,
title: $link.attr("title")
});
$link.click(function() {
$dialog.dialog("open");
return false;
});
alert('clicked');
$(document).bind('uploadDone', function(e) {
// alert("dialogCloser triggered in dialog function");
$dialog.dialog("close");
$("#<?= $gridArr['uniq'] ?>-event-path-form-submit").trigger('click');
});
return false;
});
});
});
这不会:
$(function (){
$("#<?= $gridArr['event_id'] ?> .gallery-add").each(function() {
var $dialog = $("<div></div>");
var $link = $(this).one("click", function() {
$dialog
.load($link.attr("href"))
.dialog({
modal: true,
width: 520,
height: 180,
title: $link.attr("title")
});
$link.click(function() {
$dialog.dialog("open");
return false;
});
// alert('clicked');
$(document).bind('uploadDone', function(e) {
// alert("dialogCloser triggered in dialog function");
$dialog.dialog("close");
$("#<?= $gridArr['uniq'] ?>-event-path-form-submit").trigger('click');
});
return false;
});
});
});
唯一的区别是警报声明。基本上我在这里所做的是将一堆点击事件处理程序附加到图像,这会在对话框中显示 ajax 上传表单。上传表单将图像转储到 iframe。然后 iframe 触发一个绑定到 $(document) 的 uploadDone 处理程序,并触发另一个单击事件。
唯一的区别是警报语句的存在。我把那条线拿出来,对话框无法关闭。
请告诉我我只是错过了一个分号或一些愚蠢的东西......否则我正在考虑使用延迟()。
谢谢。
解决方案:
经过一个晚上的闲逛,我终于到达了这里。我无法肯定地确定警报语句发生了什么,或者如何管理异步执行,但这解决了它。
var $dialog = $("<div></div>");
$(function (){
$("#event_22 .gallery-add").each(function() {
var $link = $(this).one("click", function() {
$dialog
.load($link.attr("href"))
.dialog({
modal: true,
width: 520,
height: 180,
title: $link.attr("title")
}).bind('uploadDone', function() {
// alert("uploadDone triggered in dialog function");
$("#myForm-submit").trigger('click');
});
$link.click(function() {
$dialog.dialog("open");
return false;
});
return false;
});
});
});
在成功的 iframe 中,
parent.$dialog.dialog("close");
parent.$dialog.trigger( 'uploadDone' );
非常感谢大家的帮助。以下是我为使其正常工作所做的更改:
- 在全局范围内的函数之外声明 $dialog
- 在创建 $link.click() 之前将 uploadDone 事件侦听器绑定到 $dialog
- 将 id="22" 更改为 id="event_22" 因为在 html < 5 中,ID 必须以 alpha 字符开头。
我不确定谁会接受,但我当然感谢您的所有帮助。