#javascript #asp.net-core #.net-core #modal-dialog
#javascript #asp.net-ядро #.net-ядро #модальный диалог
Вопрос:
[Решено — у меня было два модала, определенных с разными идентификаторами, но когда я отключил один, он работал, как ожидалось. Изменил его так, чтобы весь контент проходил через один модальный. В какой-то момент я могу вернуться, чтобы выяснить, где был конфликт.]
У меня есть основная страница mvc, на которой у меня есть модальный, который использует частичное представление. В модальном я хотел бы представить сводный список и позволить пользователю щелкнуть элемент в списке, чтобы просмотреть дополнительные сведения о модальном. Однако, пока элемент сообщает, что он был изменен (с помощью проверки предупреждения), он не обновляется заметно. Затем я создал простой тест для изменения цвета фона div, чтобы проверить, действителен ли сам подход.
В этом случае предупреждения указывают, что цвет был изменен, но, опять же, он визуально не меняется. Итак, вопрос в том, как я могу динамически обновлять текст или CSS в модальном диалоговом окне с помощью функции js / jquery? Возможно ли это вообще? Я не заинтересован в перезагрузке модального.
Мой тестовый модальный контент (_TestContentModal):
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close" id="closeMe"><span aria-hidden="true">×</span></button>
</div>
<div class="modal-body">
<div id="test">
background color test
</div>
<div>
<button onclick="UpdateDetails('yellow');">Change background to yellow</button>
</div>
</div>
<div class="modal-footer">
<button data-dismiss="modal" id="cancel" class="btn btn-default" type="button">Close</button>
</div>
</div>
<script>
function UpdateDetails(newColor) {
alert('Before change: ' $('#test').css("background-color")); // Before change: rgba(0, 0, 0)
$('#test').css("background-color", newColor);
alert('After change: ' $('#test').css("background-color")); // After change: rgba(255, 255, 0)
// clicking a second time confirms that the color was updated:
// Before change: rgba(255, 255, 0)
// After change: rgba(255, 255, 0)
}
</script>
Нажатие кнопки правильно запускает функцию, и предупреждения показывают / подтверждают, что цвет фона изменяется, однако он не изменяется заметно. Повторное нажатие кнопки подтверждает, что был установлен новый цвет.
Я относительно новичок в модальности, и вполне возможно, что я делаю это совершенно неправильно. Заранее спасибо за любые советы или решения.
Редактировать:
Включая некоторый дополнительный код в ответ на первоначальный ответ. Поскольку приведенный выше код, похоже, функционирует так, как задумано в другом месте, проблема должна заключаться в обработке модального.
На родительской странице находится ссылка на модальный:
<partial name="_TestModal" />
Это содержимое _TestModal.cs:
<!--Modal-->
<div aria-hidden="true" aria-labelledby="modal-test-label" role="dialog" tabindex="-1" id="modal-test" class="modal fade">
<div class="modal-dialog modal-lg">
</div>
</div>
Кнопка на родительской странице активирует модальный:
<div>
<a class="btn btn-secondary popup"
style="color: black;"
data-url='@Url.Action("GetTest","Runways")'
data-toggle="modal"
data-target="#modal-test">
Update<i class="fa fa-plus"></i>
</a>
</div>
Действие getTest контроллера возвращает частичное, содержащее модальный контент, показанный вверху:
return PartialView("_TestContentModal");
И, наконец, на родительской странице есть этот скрипт для обработки модального:
(function ($) {
function Index() {
var $this = this;
function initialize() {
$(".popup").on('click', function (e) {
modelPopup(this);
});
function modelPopup(reff) {
var url = $(reff).data('url');
$.get(url).done(function (data) {
$('#modal-test').find(".modal-dialog").html(data);
$('#modal-test > .modal', data).modal("show");
});
}
}
$this.init = function () {
initialize();
};
}
$(function () {
var self = new Index();
self.init();
});
}(jQuery));
Чтобы было ясно: цвет заметно не меняется. В консоли браузера не сообщается об ошибках, поэтому были добавлены предупреждения, чтобы увидеть, как реагирует элемент. За вычетом предупреждений ответ Брандо Чжана демонстрирует ожидаемое поведение, но в моем случае он не становится желтым, с задержкой таймера или без нее. И снова, предупреждения были добавлены только в качестве средства отладки.
Ответ №1:
Вы имеете в виду, что хотите показать цвет фона теста на желтый перед предупреждением после изменения?
Если это ваше требование, я предлагаю вам попробовать использовать setTimeout, чтобы не запускать оповещение немедленно.
Более подробную информацию вы можете найти в приведенных ниже кодах:
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close" id="closeMe"><span aria-hidden="true">×</span></button>
</div>
<div class="modal-body">
<div id="test">
background color test
</div>
<div>
<button onclick="UpdateDetails('yellow');">Change background to yellow</button>
</div>
</div>
<div class="modal-footer">
<button data-dismiss="modal" id="cancel" class="btn btn-default" type="button">Close</button>
</div>
</div>
<script>
function UpdateDetails(newColor) {
alert('Before change: ' $('#test').css("background-color")); // Before change: rgba(0, 0, 0)
$('#test').css("background-color", newColor);
setTimeout(function () { alert('After change: ' $('#test').css("background-color")); }, 1)
// After change: rgba(255, 255, 0)
// clicking a second time confirms that the color was updated:
// Before change: rgba(255, 255, 0)
// After change: rgba(255, 255, 0)
}
</script>
Результат:
Комментарии:
1. Спасибо, Брандо, именно для этого это и предназначено, но в моем случае фон вообще не меняет цвет. Я обновил свой пост соответствующими битами, которые обрабатывают модальный — похоже, проблема заключается в том, как я обрабатываю модальный, поскольку у вас, похоже, не было такой же проблемы только с этим разделом кода.
2. Вы пытались использовать другой браузер, чтобы проверить, не повторилось ли это снова?
3. Происходит в IE, Edge, Chrome. Мы не используем другие.