Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как сделать действительно модальный UI Dialog? (https://javascript.ru/forum/jquery/21221-kak-sdelat-dejjstvitelno-modalnyjj-ui-dialog.html)

Last1971 01.09.2011 18:40

Как сделать действительно модальный UI Dialog?
 
Вешаем модальный диалог на #someconfirmdialog, но Следующтий код вешает браузер. а) почему? б) что можно придумать взамен
$('#someconfirmdialog').dialog('open');
while ($('#someconfirmdialog').dialog('isOpen'));

Суть в том что бы последующий код не выполнялся, пока пользователь не сделал выбор в диалоге, а если еще глубже это вызывается внутри beforSubmit при редактировании таблицы jqgrid.

Sweet 01.09.2011 19:02

Ответ очевиден: нужно сделать по-нормальному!
Если это связано с сабмитом формы, значит при вызове submit ничего не отправляем, вызываем диалог, а он уже вызывает или не вызывает submit.

Kolyaj 01.09.2011 23:40

Цитата:

Сообщение от Last1971
почему?

Потому что у вас бесконечный цикл.

Цитата:

Сообщение от Last1971
что можно придумать взамен

Ничего.

Last1971 02.09.2011 06:40

Все немного сложнее. Есть таблица:
$('#sometable').jqGrid(...);

Есть форма добавления записей в таблицу:
$("#sometable").jqGrid("navGrid","#somepager",{...},
{width:420,afterSubmit:processAddEdit,closeOnEscape:true,closeAfterEdit:true,afterShowForm : datep ,beforeSubmit:checkSum},
...);

Ну и задача, проверить введенные данные на предмет что такие уже есть в базе, т.е. это возможно, иначе просто бы сделал уникальный ключ, но чаще просто бывает ошибкой. И если данные совпали то выдать модальный диалог, продолжаем "да" "нет"? Т.е. вызывается следующая функция:
function checkSum(postdata, formid){
var a=$.ajax({async:false,
                   url:"checksum.php",
                   data{date:postdata.date,sum:postdata.sum,supplier:postdata.supplier},
                   dataType:'text'});
if (a.responseText=='netutut') checkFlag=true;
else {
    $( "#somedialog" ).html('Number='+a.responseText);
    $( "#somedialog" ).dialog('open');
}
//    while ($( "#somedialog" ).dialog('isOpen')) {}          
return [checkFlag,'!!!'];
}

Но! Происходит добавление записи на фоне висящего модального диалога, а если раскоментировать while, то получаем бесконечный цикл.
И вот в каком месте тут перехватить отправку данных на сервер я пока не понимаю.
Но если заменить вызов диалога на
checkFlag=confirm('Number='+a.responseText);

То все работает как надо, т.е. отправка данных происходит, только в случае согласия пользователя.


Часовой пояс GMT +3, время: 01:12.