Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2015, 05:57   #1
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
Хорошо Диалоговое окно на js

Добрый день
В VBA, например и VB.NET есть такая функция
Код:
Public Function MsgBox( _
   ByVal Prompt As Object, _
   Optional ByVal Buttons As MsgBoxStyle = MsgBoxStyle.OKOnly, _
   Optional ByVal Title As Object = Nothing _
) As MsgBoxResult
которая выводит диалоговое окно и возвращает код нажатой кнопки в диалоговом окне.

В HTML у меня есть функция:
Код:
function search()
{
		msgbox(...........);
}

function msgbox($caption,$title,$type,$buttons,$button_default){
		.......
		$('.message').Show();
		
		return 'ID нажатой кнопки';// как это реализовать?
}
Код:
<div id="msg" class="message">
		<div class="caption">caption<div class="close">X</div></div>
		<div class="title">
			<div><img src=""></div>
			<div>title</div>
		</div>
		<div class="footer">
			<button id="1">Ок</button>//этих кнопок нет, создаются динамически
			<button id="2">Ок</button>//
                </div>
</div>
вот так я запускаю функцию:
Код:
<span class="href"  onclick="search()">Наименование</span>
Так вот в чем вопрос: могу ли я как то сделать что бы функция msgbox возвращала id нажатой кнопки?
Пробовал через бесконечный цикл в функции, ожидающий нажатие, но что не получилось

Последний раз редактировалось maksim_serg; 18.05.2015 в 06:32.
maksim_serg вне форума Ответить с цитированием
Старый 18.05.2015, 07:25   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну а че нет?
Например сохранять код кнопки в диве:
Код:
<button id="2" onclick="$('.message').setAttribute('ModalResult',this.id)">Ок</button>
Код:
<button id="2" onclick="this.parentNode.parentNode.setAttribute('ModalResult',this.id)">Ок</button>
Ну и потом выбирай
Код:
 var wnd;
		wnd=$('.message');
                wnd.Show();
		return wnd.getAttribute('ModalResult');
Это при условии что Джикверик умеет возвращать из селектора объект.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.05.2015, 07:36   #3
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

Цитата:
var wnd;
wnd=$('.message');
wnd.Show();
return wnd.getAttribute('ModalResult');
и что это даст?
после открытия окна сразу же получиться атрибут, который еще не задан. функция завершит свою работу и нажатие кнопки не определиться (я так думаю)
как мне кажется между .show и return нужно делать "паузу" - не завершать функцию, пока не нажметься кнопка

возможно, я не верно объяснил: показываем диалоговое окно. нажимаем кнопку: окно закрывается и функция возвращает id

Последний раз редактировалось maksim_serg; 18.05.2015 в 07:38.
maksim_serg вне форума Ответить с цитированием
Старый 18.05.2015, 07:41   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

ShowModal в Джикверике нет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.05.2015, 07:50   #5
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

что то я такого не встречал
нашел такой код, но он у меня не работает
Код:
<!DOCTYPE html>
<html>
<body>

<button onclick="myFunction()">Show dialog</button>

<dialog id="myDialog">This is a dialog window</dialog>

<script>
function myFunction() { 
    document.getElementById("myDialog").showModal(); 
} 
</script>

</body>
</html>

Последний раз редактировалось maksim_serg; 18.05.2015 в 07:55.
maksim_serg вне форума Ответить с цитированием
Старый 18.05.2015, 13:03   #6
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Сила JS в асинхронности, а вы пытаетесь эту силу выдать за недостаток. Брендан Айк будет вами недоволен.

Используйте коллбеки:
Код:
function search()
{
    msgbox(/* params, */ function(id) {
        console.log(id);
    });
}

function msgbox(/* params, */ callback){
    .......
    $('.message').Show();
    $('.message button').on('click', function() {
        callback('id');
    });
}
Или ещё можно использовать промисы (Promise).
^-.-^ My GitHub

Последний раз редактировалось Fenex; 18.05.2015 в 13:11.
Fenex вне форума Ответить с цитированием
Старый 18.05.2015, 13:43   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
ShowModal в Джикверике нет?
В UI есть https://jqueryui.com/dialog/#modal-confirmation

Ну и конечно есть куча и других библиотек/плагинов с диалогами. Например, для бутстрапа http://bootboxjs.com/ (ну точнее он есть и в самом чистом бутстрапе, но не сильно простой в использовании)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.05.2015, 14:20   #8
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

про это я знаю, просто не знал что оно так называется

функция которая у меня сейчас есть примерно так и работает как эти плагины.
В чем на мой взгляд проблема: сейчас у меня как и у них функция, вызываемая при нажатии на кнопку задается в момент "инициализации" диалогового окна. мне это не удобно.
Код:
bootbox.dialog({
  message: "I am a custom dialog",
  title: "Custom title",
  buttons: {
    success: {
      label: "Success!",
      className: "btn-success",
      callback: function() {
        Example.show("great success");
      }
    }
    }
  }
});
мне хотелось сделать так:

Код:
function xxx(){
var res;
res = msgbox(....);

switch (res) {
  case 3:
    alert('1')
    break
  case 4:
    alert('2')
    break
  case 5:
    alert('3')
    break
}

}
maksim_serg вне форума Ответить с цитированием
Старый 18.05.2015, 14:26   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Зачем?



Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.05.2015, 14:28   #10
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

что б потом не запутаться в моем километре кода
maksim_serg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Диалоговое окно Antoshkaswimm Microsoft Office Excel 3 23.12.2012 23:01
Диалоговое окно Абзац Vanya_Soltys Общие вопросы Delphi 2 12.05.2010 16:35
Диалоговое окно Busine2009 Microsoft Office Word 0 01.08.2009 09:15
Диалоговое окно Михаил Юрьевич Общие вопросы Delphi 11 01.06.2009 20:31
Диалоговое окно Beggins Общие вопросы C/C++ 3 09.05.2008 05:03