2016-06-06 4 views
0

У меня есть более крупный диалог интерфейса JQuery. Внутри этого у меня есть несколько более крупных скриптов PHP, которые заполняют содержимое диалогового окна. В ESCAPE я закрою диалог. После каждого:JQuery Ajax Timing

$('.editbtn').click(function() { 
    $id  = $(this).attr('name'); 
    var $tabid = $id.split("|"); 
    var $url = "ajax/edit.php?...."; 

    $("#dialog-confirm").load($url); 
    $("#dialog-confirm").dialog("option", "width", $tabid[4]); 
    $("#dialog-confirm").dialog("option", "height", $tabid[5]); 
    $("#dialog-confirm").dialog('open'); 

    $("#dialog-confirm").first().focus(); 
}); 

Я установил фокус.

Иногда это работает нечасто. Очевидно, это зависит от исполнения скриптов PHP. Я вижу диалог со старым контентом (после закрытия) и через короткий промежуток времени новый выбранный контент. Пока новый выбранный контент не отображается, ESCAPE работает. если диалог заполнен новым контентом, ESCAPE не работает. Это означает, что экран диалога потерял фокус.

Как я могу сделать shure, что диалог отображается только, если скрипт PHP заканчивается?

Заранее спасибо.

ответ

1

Вы можете просто сделать это, указав полную функцию обратного вызова.

$('.editbtn').click(function() { 
    $id  = $(this).attr('name'); 
    var $tabid = $id.split("|"); 
    var $url = "ajax/edit.php?...."; 

    $("#dialog-confirm").load($url, function() { 
    $("#dialog-confirm").dialog("option", "width", $tabid[4]); 
    $("#dialog-confirm").dialog("option", "height", $tabid[5]); 
    $("#dialog-confirm").dialog('open'); 

    $("#dialog-confirm").first().focus(); 
    }); 
}); 

И я бы предложил вам определить переменную для объекта jQuery для повышения производительности.

var confirm = $("#dialog-confirm"); 

confirm.dialog("option", "width", $tabid[4]); 
confirm.dialog("option", "height", $tabid[5]); 
confirm.dialog('open'); 

confirm.first().focus(); 
+0

Большое спасибо - это работает! :) – OldMan