Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.02.2014, 02:56
Новичок на форуме
Отправить личное сообщение для Rustam Посмотреть профиль Найти все сообщения от Rustam
 
Регистрация: 13.12.2012
Сообщений: 2

Дождаться ответа пользователя
Знаю, что тема стара как мир, но мне нужно дождаться ответа пользователя и "продолжить" выполнение функции. Может есть какие-нибудь решения без confirm (это работает, но мне необходимо показать пользователю форматированное сообщение) и setTimeout?

Ситуация такая:
есть платформа(sharepoint), которая предоставляет возможность написать функцию валидации данных SaveAction(). В этой функции я вызываю модальный диалог с вопросом "Сохранить?". Получаю ответ в колбеке и принимаю решение.

Функция SaveAction (название и атрибуты переопределить нельзя) дожидается ответа, только если мы используем confirm, что логично.
Как этого добиться в модальном диалоге?
Платформа Sharepoint ждет возврата true/false от этой функции, изменить это поведение невозможно.
function SaveAction(){
   ...
   var options = {
      callback: MyCallback
   }
   showModalDialog(options);
}

Последний раз редактировалось Rustam, 21.02.2014 в 02:59. Причина: добавить код
Ответить с цитированием
  #2 (permalink)  
Старый 21.02.2014, 03:08
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Rustam
Как этого добиться в модальном диалоге?
Ну какой признак завершения ввода ?
Нажатие еnter ? , ввод единственного символа(или заранее определенных слов) ? нажатие на кнопку "Сохранить" ?
Ответить с цитированием
  #3 (permalink)  
Старый 21.02.2014, 03:27
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Rustam
Как этого добиться в модальном диалоге?
Никак. JS однопоточный, и этим все сказано.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 21.02.2014, 03:58
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от danik.js
Никак. JS однопоточный, и этим все сказано.
1. Тупой бесконечный цикл проверяющий наличие ответа
2. Кто мешает изменить логику, и запускать SaveAction() по завершении диалога модалки ?
Ответить с цитированием
  #5 (permalink)  
Старый 21.02.2014, 04:31
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Deff
1. Тупой бесконечный цикл проверяющий наличие ответа
Смотри мой комментарий выше, об однопоточности JS (причем один поток с ui).

Сообщение от Deff
2. Кто мешает изменить логику, и запускать SaveAction() по завершении диалога модалки ?
Никто. Разве что имеются для этого условия. Вот только это не ответ на прямо поставленный вопрос:
Сообщение от Rustam
Функция SaveAction (название и атрибуты переопределить нельзя) дожидается ответа, только если мы используем confirm, что логично.
Как этого добиться в модальном диалоге?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 21.02.2014, 05:16
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от danik.js
Смотри мой комментарий выше, об однопоточности JS (причем один поток с ui).

<input id="modal"   placeholder='Жду ввода "Yes"'>
<script type="text/javascript">

function showModalDialog(options){
var inp = document.getElementById('modal');
alert('Start Modal')
  while (inp.value != 'Yes') {
     var out=false;
  }
  return out=true;

}
var MyCallback = 1
function SaveAction(){
   //...
   var options = {}
   if( showModalDialog(options))alert('Диалог завершен!')
}
SaveAction()
</script>
Ответить с цитированием
  #7 (permalink)  
Старый 21.02.2014, 05:20
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Благодарю за наглядную демонстрацию моего комментария
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 21.02.2014, 05:34
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

danik.js,
Можно реализовать и многопоточность
Поставь перед циклом нужное число setTimeout
Короче коммент никчемный, ибо речь идёт в конце концов о возможности решении, а не безапеляционном ничего не дающем заявлении
Ответить с цитированием
  #9 (permalink)  
Старый 21.02.2014, 06:28
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Deff
Можно реализовать и многопоточность

Сообщение от Deff
Короче коммент никчемный
Я лишь дал знать, что невозможно заменить строчку
if (confirm()) {} на if (myConfirm()) {}
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #10 (permalink)  
Старый 21.02.2014, 09:22
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от Rustam
Функция SaveAction (название и атрибуты переопределить нельзя) дожидается ответа, только если мы используем confirm, что логично.
Как этого добиться в модальном диалоге?
confirm это модальный диалог, а ваш хтмль никакого отношения к диалоговым окнам не имеет, потому что не окно, а просто кусок хтмл.

Что касается бывших методов совмещения то за злоупотребления очевидно их забанили:

Сообщение от Rustam
showModalDialog(options);
Цитата:
Deprecated
This feature has been removed from the Web. Though some browsers may still support it, it is in the process of being dropped. Do not use it in old or new projects. Pages or Web apps using it may break at any time.
Такая тема уже была, когда некий профессор заявил что на вебе ничего мониторить не надо. Не бывает типа тут 1 раз в секунду опрос кнопки.

Как видите бывает. Делается на самом деле элементарно через setInterval()
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновление страницы после получения ответа от сервера potrashitel AJAX и COMET 9 24.02.2015 10:04
Валидация пользователя по IP-адресу lazerru Общие вопросы Javascript 1 03.04.2013 12:40
Обработка ответа после POST-запроса (jQuery - Ajax) battrack jQuery 6 29.07.2012 16:06
Активация кнопки при вводе верного ответа JukiPuki Общие вопросы Javascript 3 08.02.2010 23:12
как дождаться AJAX ответа scuter Общие вопросы Javascript 3 23.03.2008 05:54