奇怪的行爲,這是一個jQuery的主人:使用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處理程序,並觸發另一個點擊事件。
唯一的區別是警報聲明的存在。我把這條線取出來,並且對話框不能關閉。
請告訴我我只是錯過了一個分號或什麼愚蠢的....否則我想使用delay()。
謝謝。
解決方案:
我終於到達了此消磨一個晚上之後。我無法明確地確定警報聲明中發生了什麼,或者如何管理異步執行,但是這種方法很有效。
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');
非常感謝大家的幫助。下面是我做得到這個工作的變化:
-
功能外
- 宣佈$對話框在全球範圍內
- 約束uploadDone事件監聽器創建$ $ link.click()
- 之前對話框在html中更改id =「22」爲id =「event_22」原因< 5,ID必須以alpha字符開頭。
我不確定誰的回答接受,但我當然非常感謝您的幫助。
你能展示*呈現*如同在瀏覽器中看到的jQuery;因爲我很確定'= ... ?>'是一個服務器端腳本?JavaScript,因此jQuery,在客戶端工作,所以服務器端是不相關的。另外,什麼是相關的HTML? –
我很想,但是這個塊是由ajax加載的,所以firefox view source不會顯示它,並且由於某種原因它在firebug中也不可見。是的,這些是帶有一些你想要研究的獨特變量的PHP短標籤。這可能會有問題。 – glyph
要部分回答你的問題,<?= $ gridArr ['event_id']?>是一個數字值。該div有id =「22」所以#<?= $ gridArr ['event_id']?>將被替換爲#22 – glyph