2010-06-26 135 views
1

我有这个测试代码,除了自动完成功能在第二次打开对话框时停止工作以外,完美地工作。我需要使用html以这种方式打开对话框,因为我希望它能够快速打开,这是最好的方式。为什么自动完成功能第二次停止工作?jQuery自动完成只在对话框中工作一次

var $container = $('#container'), 
    $input = $container.find('input:eq(0)'); 

var source = new Array(2); 

source[0] = { value: 1000, label: 'Description' }; 
source[1] = { value: 1001, label: 'Description' }; 

$input.autocomplete({ source: source }); 

var $dialog = $('<div></div>').dialog({ 
    autoOpen: false, 
    modal: true, 
    beforeclose: function() { $dialog.html(''); } 
}); 

$('#open').click(function() { 
    $dialog.dialog('open').html($container); 
}); 

编辑:我这样使用html的原因是因为我想打开一个空的对话框来加速它。这样做会使对话看起来更有反应。我想继续以这种方式打开对话框。这个秘密依然存在,为什么事件处理程序和自动完成功能第二次停止工作,我以这种方式打开对话框? $ container或$ input中没有任何更改。

回答

0

如果您的$容器内容是静态的,为什么不添加它只是一次。我相信你的问题是每次打开对话框时添加$ container元素的事实。

尝试

var $container = $('#container'), 
    $input = $container.find('input:eq(0)'); 

var source = new Array(2); 

source[0] = { value: 1000, label: 'Description' }; 
source[1] = { value: 1001, label: 'Description' }; 

$input.autocomplete({ source: source }); 

var $dialog = $('<div></div>').dialog({ 
    autoOpen: false, 
    modal: true 
}).html($container); 

$('#open').click(function() { 
    $dialog.dialog('open'); 
}); 
0

即与jQuery UI状态管理相关的,因为这种状态管理的,你不能实例相同的插件上的元素多次,除非你先摧毁插件实例。

此处了解详情:http://blog.nemikor.com/2009/04/08/basic-usage-of-the-jquery-ui-dialog/

反正你可以调用初始化对话框HTML(),它会工作:

var $dialog = $('<div></div>').dialog({ 
    autoOpen: false, 
    modal: true 
}).html($container); 

$('#open').click(function() { 
    $dialog.dialog('open'); 
}); 
0

这奏效了我。基本上清除对话框,并关闭它。

     $dailyregisterdialog.dialog({ 
          resizable: false, 
          width: 800, 
          modal: true, 
          title: "Daily Class Register", 
          position: [150,90], 
          close: function(){ 
           $(this).html("").destroy(); 
          } 
         });