这是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' );
非常感谢大家的帮助。以下是我为实现这一目标所做的更改:
我不确定接受谁的答案,但我非常感谢你的帮助。
答案 0 :(得分:5)
警告语句很可能会导致一个块,它会在上面的代码执行之前完成上面的代码。我的猜测是,如果没有警报,它会在完成上传之前一直返回false。
答案 1 :(得分:1)
我的猜测是在绑定uploadDone事件之前加载对话框。您是否有理由在click事件处理程序中绑定它,而不是在创建它时?
$(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;
});
return false;
});
$(document).bind('uploadDone', function(e) {
// alert("dialogCloser triggered in dialog function");
$dialog.dialog("close");
$("#<?= $gridArr['uniq'] ?>-event-path-form-submit").trigger('click');
});
});
});
似乎这应该可以工作,只要你总是希望每当广播uploadDone时关闭所有对话框。但是,就像大卫在你的问题评论中说的那样......某些背景会有所帮助