4

这段代码完美运行,除了 - 对话窗口不会像我预期的那样在 X 毫秒后关闭......

setTimeout函数被执行(我把 alert() 放在那里并且它工作了......),所以我认为问题出在$("#alert div").dialog('close');但我不知道出了什么问题......

if ($("#alert").length) {
    var title;
    if ($("#alert span").length) {
        title = $("#alert span").text();
    }
    $("#alert div").dialog({
        title: title,
        modal: true,
        open: function() {
            setTimeout(function() {
                $("#alert div").dialog('close');
            }, 2000);
        }
    });
}

编辑:如果有帮助,这里是 HTML:

<div id="alert">
    <span>Password change</span>
    <div>Password was successfully changed.</div>
</div>

解决!如果有人知道为什么我的代码不起作用,那就太好了...

4

2 回答 2

12

你有一个范围问题。试试这个jsFiddle 示例

if ($("#alert").length) {
    var title;
    if ($("#alert span").length) {
        title = $("#alert span").text();
    }
    $("#alert div").dialog({
        title: title,
        modal: true,
        open: function() {
            var foo = $(this);
            setTimeout(function() {
               foo.dialog('close');
            }, 2000);
        }
    });
}​

发生这种情况并且没有像您预期的那样工作的原因是您引用成为对话框的目标 div 的方式以及 jQuery UI 构建对话框的方式。如果您查看开发人员控制台,您会看到 jQuery 将您的 div 拉出它在 DOM 中的原始位置,因此不再可以被引用,#alert div因为它不再是#alert. 如果您为该 div 提供了自己的 ID,它将按预期工作,并且您不需要临时变量来引用它。

于 2012-08-12T20:22:11.133 回答
0

经过测试和工作的现场演示:

http://jsfiddle.net/oscarj24/q6tD9/2/

我认为这种方式更好:

jQuery.fn.exists = function(){return this.length>0;}

$(function() {
    if($('#alert').exists()){
        var modal = $('#alert div');
        modal.dialog({ title: $('#alert span').text(), modal: true });
        var opened = modal.dialog('isOpen');
        if(opened){
            setTimeout(function(){ 
               modal.dialog('close'); 
            }, 2000);
        }
    }
});​
于 2012-08-12T20:26:17.463 回答