Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Всплывающее сообщение (https://javascript.ru/forum/misc/72585-vsplyvayushhee-soobshhenie.html)

wolfio 10.02.2018 19:52

Всплывающее сообщение
 
Здравствуйте, О великие гуру js!
Нуждаюсь в вашей помощи, по следующей задаче:

пишу страничку, на которой есть кнопка, по нажатии которой я отправляю посредством post запроса данные, а ответ хочу отобразить в виде "текст, который я отдал в ответ" (текст не важен, но это текст).
Мои познания в js, к сожалению не столь велики, и как я понял, я могу выбрать только между modal window, и popup <smthg>.
Однако modal window, как я смог нагуглить, блокируется как всплывающее окно (типа реклама), если это результат асинхронного запроса.

Остается popup.
Уперся я в то, что не знаю как сделать его именно всплывающим сообщением. Примеры, которые я нагугливал - это примеры вызова статичного дива, в котором уже условно прописан текст, и он просто невидим. А могу ли я сделать аналогично с динамическим текстом?

Вот то, что я имею сейчас. Вместо алерта я пытался подставить с десяток всяких кривых вариантов, но так ничего и не вышло. Кстати, может быть можно как-то стилизовать алерт-окно под всплывалку?

$(document).ready(function () {
    $(".b-button_right_").click(function () {
        $.post("MakeAdRespond"
            , {AdId: $(this).closest("div.b_ad").prop("id")}
            , function (data) {alert(data)} //всплывалкой показать data
        )
    });
});

В идеале мне хотелось бы в data выводить html текст, чтобы он в сообщении отображался соответствующе (например, показать таблицу в ответе). Но т.к. я не знаю возможно ли это в принципе, ограничился убогой реализацией.

Возможно, что есть какой-то более простой способ, которого я не знаю. Если вам придет в голову эта мысль, скажите пожл.

Белый шум 10.02.2018 20:04

function (data) { $("#div_id").html(data); $("#div_id").dialog(); }
https://jqueryui.com/dialog/

wolfio 10.02.2018 21:45

Цитата:

Сообщение от Белый шум (Сообщение 477543)
function (data) { $("#div_id").html(data); $("#div_id").dialog(); }
https://jqueryui.com/dialog/

Простите, О Великий Белый шум)
так вот простите за идиотский вопрос - но правильно ли я понял, что как такового окна поверх в виде всплывающего сообщения нет и это просто иллюзия, созданная стилями?

и еще вопрос - а как сделать так, чтобы этот контейнер, который я должен заполнить, изначально был невидим, ну и чтобы видимость была только при ответе и до закрытия?

рони 10.02.2018 22:40

Цитата:

Сообщение от wolfio
чтобы этот контейнер, который я должен заполнить, изначально был невидим,

:-?
<style type="text/css">
#div_id{
  display: none;
}
    </style>

Белый шум 11.02.2018 01:27

Цитата:

Сообщение от wolfio
правильно ли я понял, что как такового окна поверх в виде всплывающего сообщения нет и это просто иллюзия, созданная стилями?

да

j0hnik 11.02.2018 10:21

Цитата:

Сообщение от wolfio (Сообщение 477551)
О Великий Белый шум

:write:

Белый шум 11.02.2018 10:35

j0hnik,
Мда, звучит как сарказм :)

wolfio 11.02.2018 11:33

Цитата:

Сообщение от Белый шум (Сообщение 477631)
j0hnik,
Мда, звучит как сарказм :)

Но это не сарказм)
люди, которые знают в чем то больше меня, всегда выглядят величаво) ведь нельзя знать всего на свете)

wolfio 11.02.2018 15:59

Господа, у меня получилось, но изначально в вопросе я не учел пары нюансов, о которых просто не мог подумать:
1. Как сделать такое ограничение при клике, чтобы последующий клик "закрывал" (скрывал и очищал) див от предыдущего клика?
2. Можно ли сделать через jquery привязку позиции дива к месту, на котором был курсор во время клика?

Белый шум 11.02.2018 20:59

1. $('#div_id').html('');
2. Читайте документацию: http://api.jqueryui.com/dialog/

laimas 11.02.2018 21:13

1. $('#div_id').empty();

wolfio 14.02.2018 17:44

Цитата:

Сообщение от Белый шум (Сообщение 477727)
1. $('#div_id').html('');
2. Читайте документацию: http://api.jqueryui.com/dialog/

Добрый день.
С документацией ознакомился, в принципе все понял, и все что хотел получил.
У меня возник вопрос уже немного не по диалогу, если позволите:
На примере моего кода, описанного ранее
$(document).ready(function () {
    $(".b-button_right_").click(function () {
        $.post("MakeAdRespond"
            , {AdId: $(this).closest("div.b_ad").prop("id")}
            , function (data) {$(data).dialog({dialogClass: "notification"})}
        )
    });

Чтобы не клепать кучу функций для вызовов разных диалогов, я мог бы прям в ответе передавать html див, с соответствующим именем и ид класса, предварительно подготовив стили для каждого. Таким образом, функцию эту я мог бы использовать как универсальную отображалку любого дива в виде диалога.
Вопрос: как корректно на js обратиться к data параметру, если он условно содержит html текст?
Вариант, который я написал в коде не работает :/

Заранее премного благодарен

Nexus 14.02.2018 17:50

wolfio, в вашем коде вы работаете с элементом, которого еще нет на странице, стоит его сначала добавить в DOM страницы.

рони 14.02.2018 18:13

wolfio,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  :focus{
    outline: none;
  }
  .ui-dialog.notification  {
     background-image: none;
    background-color: #32CD32;
  }

  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
  <script>
$(function() {
var data = '<div id="slider">slider</div>'
function fn(data) {$(data).appendTo("body").dialog({dialogClass: "notification"})}
fn(data)
});
  </script>
</head>

<body>


</body>
</html>

wolfio 15.02.2018 11:09

Господа, благодарю за внимание.
Рони,
Если я правильно понял, то ваш способ добавляет див в боди при каждом получении уведомления? и если пользователь будет их получать без обновления страницы, то начнет появляться мусор? хотел бы в этом разобраться чисто для понимания.

мой конечный вариант в итоге выглядит примерно так:
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  :focus{
    outline: none;
  }
  .ui-dialog.notification  {
     background-image: none;
    background-color: #32CD32;
  }
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
  <script>
	$(function() {
		var data = '<div id="slider">test</div>'
		function fn(data) {
			<!-- $(data).appendTo("body").dialog({dialogClass: "notification"}) -->
			$("#slider").html(data); 
			$("#slider").dialog({
								title: "Notification",
								closeOnEscape: true,
								closeText: "Закрыть",
								dialogClass: "notification",
								show: "slide",
								modal: false,
								resizable: false,
								open: function(event, ui){
								setTimeout("$('#slider').dialog('close')",1500);
								}
							});
			}
		fn(data)
	});
  </script>
</head>
<body>
<div id="slider" style = "display:none"></div>
</body>
</html>


и у меня 2 заключительных вопроса по моему финальному коду:
1. как коректно вывести кирилицу в уведомлении? у меня кирилица выводится в виде знаков вопроса.
2. оптимально ли написан этот фрагмент кода? или его можно-как то упростить/улучшить? Выглядит довольно громоздко, по моему, сугубо личному, мнению

рони 15.02.2018 11:46

Цитата:

Сообщение от wolfio
то начнет появляться мусор?

можно по close, удалять содержимое информационного блока, если будет проблема.
1. смотреть настройки сервера.
2. нормально


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