以编程方式触发jQuery UI对话框上的事件

时间:2012-10-25 17:54:58

标签: jquery jquery-ui

我有一个jQuery对话框,我使用open回调通过AJAX加载一些数据。

例如:

$('#dialog').dialog({
    modal: true,
    autoOpen: false,
    open: function(){
        $('.content', this).load('/path/to/file', function(){
            // even more code
        });
        // more code
    }
});

虽然对话框已经打开,但我想通过AJAX重新加载数据。我想我可以触发上面绑定的open函数。我在the docs中读到你可以使用open绑定到$(".selector").bind("dialogopen", function(event, ui){})事件,所以我认为我也可以触发事件。

我试过了$('#dialog').trigger('dialogopen'),但什么都没发生。如何触发jQuery对话框的open事件?

目前,我发现我可以使用$('#dialog').dialog('option', 'open')(),但这很难看,还有更好的办法!

3 个答案:

答案 0 :(得分:3)

你可以重写你所拥有的内容,如$('#dialog').dialog('option')['open']()(再次丑陋)

可以美化为,

var $dOpt = $('#dialog').dialog('option');

然后

$dOpt.open();

DEMO: http://jsfiddle.net/bj4hK/2/


我认为您正在寻找$('#dialog').dialog('open') http://jsfiddle.net/bj4hK/

其他脏技巧是关闭并重新打开。 $('#dialog').dialog('close').dialog('open')< - 但是,如果你有一些代码onclose

,这会搞砸

答案 1 :(得分:1)

为什么不在open事件中提取函数并在任何地方重用它?

$('#dialog').dialog({
    modal: true,
    autoOpen: false,
    open: function(){
        loadfunction()
    }
});

function loadfunction(){
  $('.content').load('/path/to/file', function(){
            // even more code
        });
        // more code
}

因此您可以在任何地方使用loadfunction

答案 2 :(得分:0)

在jQuery UI中,通过调用窗口小部件名称并提供方法名称作为参数来调用方法。所以你可以这样做:

$('#dialog').dialog("open");