Всплывающее сообщение
Здравствуйте, О великие гуру 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 текст, чтобы он в сообщении отображался соответствующе (например, показать таблицу в ответе). Но т.к. я не знаю возможно ли это в принципе, ограничился убогой реализацией. Возможно, что есть какой-то более простой способ, которого я не знаю. Если вам придет в голову эта мысль, скажите пожл. |
function (data) { $("#div_id").html(data); $("#div_id").dialog(); }
https://jqueryui.com/dialog/ |
Цитата:
так вот простите за идиотский вопрос - но правильно ли я понял, что как такового окна поверх в виде всплывающего сообщения нет и это просто иллюзия, созданная стилями? и еще вопрос - а как сделать так, чтобы этот контейнер, который я должен заполнить, изначально был невидим, ну и чтобы видимость была только при ответе и до закрытия? |
Цитата:
<style type="text/css"> #div_id{ display: none; } </style> |
Цитата:
|
Цитата:
|
j0hnik,
Мда, звучит как сарказм :) |
Цитата:
люди, которые знают в чем то больше меня, всегда выглядят величаво) ведь нельзя знать всего на свете) |
Господа, у меня получилось, но изначально в вопросе я не учел пары нюансов, о которых просто не мог подумать:
1. Как сделать такое ограничение при клике, чтобы последующий клик "закрывал" (скрывал и очищал) див от предыдущего клика? 2. Можно ли сделать через jquery привязку позиции дива к месту, на котором был курсор во время клика? |
1. $('#div_id').html('');
2. Читайте документацию: http://api.jqueryui.com/dialog/ |
1. $('#div_id').empty();
|
Цитата:
С документацией ознакомился, в принципе все понял, и все что хотел получил. У меня возник вопрос уже немного не по диалогу, если позволите: На примере моего кода, описанного ранее $(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 текст? Вариант, который я написал в коде не работает :/ Заранее премного благодарен |
wolfio, в вашем коде вы работаете с элементом, которого еще нет на странице, стоит его сначала добавить в DOM страницы.
|
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> |
Господа, благодарю за внимание.
Рони, Если я правильно понял, то ваш способ добавляет див в боди при каждом получении уведомления? и если пользователь будет их получать без обновления страницы, то начнет появляться мусор? хотел бы в этом разобраться чисто для понимания. мой конечный вариант в итоге выглядит примерно так: <!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. оптимально ли написан этот фрагмент кода? или его можно-как то упростить/улучшить? Выглядит довольно громоздко, по моему, сугубо личному, мнению |
Цитата:
1. смотреть настройки сервера. 2. нормально |
Часовой пояс GMT +3, время: 10:33. |