2010-06-01 70 views
1

當我調用該函數時,該對話框不起作用。 如果我將對話框構造移動到showtimes_list函數中,一切正常。全局jQuery對話框變量無法正常工作

我認爲在函數外部聲明的變量在上下文中是全局的嗎?

var dialog_list = $("<div></div>").dialog({ 
    autoOpen: false, 
    modal: true, 
    height: 300, width: 720, 
}); 

function showtimes_list(sid){ 
    dialog_list.html(""); 
    $.get("ajax_showtimes.php?sid="+sid, function(data){ 
      dialog_list.html(data); 
     } 
    ); 

    dialog_list.dialog("open"); 
} 

---編輯---

這正從一個onClick叫showtimes_list。

---編輯---

這是工作:

function showtimes_list(sid){ 
    $("#stl").dialog("open"); 
    $("#stl").html(""); 
    $.get("ajax_showtimes.php?sid="+sid, function(data){ 
      $("#stl").html(data); 
     } 
    );  
} 

$(function(){ 
    $('<div id="stl"></div>').appendTo(document.body).dialog({ 
     autoOpen: false, 
     modal: true, 
     height: 300, width: 720, 
    });  
}); 
+1

我很困惑。你能詳細說明*不能工作嗎? – Pointy 2010-06-01 22:12:49

+0

不太可能繼續下去。你在document.ready()函數中調用了這個嗎?或者這只是一個腳本標籤? – womp 2010-06-01 22:18:37

+0

@積分錯別字..抱歉。調用時無法將變量設置移動到函數中時不起作用。 – 2010-06-01 22:25:07

回答

1

而不是創建一個新的空股利,股利添加到文檔,如:

<body> 
    <div id="dialog"> 
     <div id="dialogContent"></div> 
    </div> 
</body> 

然後,您的腳本將變爲

var dialog_list = $("#dialog").dialog({ }); 

然後,當你想改變,而不是改變對話框本身該元素的HTML,你會想改變dialogContent元素:

function showtimes_list(sid){  
    var content = $("#dialogContent"); 
    content.html(""); 
    $.get("ajax_showtimes.php?sid="+sid, function(data){ 
      content.html(data); 
     } 
    ); 

    dialog_list.dialog("open"); 
} 

如果你不想在你的HTML這些空的div結構,您應該將它們動態添加到主體中,並使用類而不是ids。

編輯:爲了回答你的問題,爲什麼當dialog_list在函數之外時它不起作用,我想它與生成的html有關。

當你調用.dialog(),jQuery的生成下面的HTML:

<div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable"> 
    <div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix"> 
     <span id="ui-dialog-title-dialog" class="ui-dialog-title">Dialog title</span> 
     <a class="ui-dialog-titlebar-close ui-corner-all" href="#"><span class="ui-icon ui-icon-closethick">close</span></a> 
    </div> 
    <div style="height: 200px; min-height: 109px; width: auto;" class="ui-dialog-content ui-widget-content" id="dialog"> 
     <p>Dialog content goes here.</p> 
    </div> 
</div> 

如果這是你的功能之外,每當它在腳本中遇到它被稱爲......然後,在你功能,您可以更改生成的HTML。自從我動態更新對話框內容以來,這已經有一段時間了,但我遇到了同樣的問題,並且生成的HTML是罪魁禍首。我認爲我的解決方案是,我的解決方案是,而不是在原始答案中的嵌套div,我創建了對話框(在函數外部),並且在函數內部,更改了html的格式:

function showtimes_list(sid){ 
    dialog_list.find('.ui-dialog-content').html(""); 
    $.get("ajax_showtimes.php?sid="+sid, function(data){ 
      dialog_list.find('.ui-dialog-content').html(data); 
     } 
    ); 

    dialog_list.dialog("open"); 
}