Всплывающее сообщение
Здравствуйте, О великие гуру 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, время: 17:01. |