jQuery addClass для привязки HTML будет работать впервые

#c# #jquery #append #bootstrap-modal

#c# #jquery #добавить #bootstrap-модальный

Вопрос:

На одном из моих веб-сайтов должна быть функция, которая работает следующим образом: Нажатие кнопки> Всплывающий режим > Закрыть режим

Когда пользователи нажимают на кнопку, стиль кнопки будет изменен на загрузку с помощью jQuery addClass, пока не появится модальное всплывающее окно.

Когда появится модальное всплывающее окно, кнопка позади будет удалить класс загрузки с помощью jQuery.

Когда пользователи закрывают модал, они могут снова нажать на кнопку и снова вызвать modal pop.

Я перепробовал много методов, но у всех методов будет своя проблема, о которой я упоминаю ниже:

Это мой код кнопки (в iFrame)

 <a runat="server" id="btnPersonalSearch" class="btn btn-primary btn-lg btn-block" onserverclick="btnPersonalSearch_ServerClick"  >
    <span runat="server" id="iconPersonalSearch" class="" role="status" aria-hidden="true"></span>
    Search
</a>
  

Когда пользователи нажимают на кнопку выше, класс button будет изменен с помощью jQuery

 $("#btnPersonalSearch").click(function () {
    $('#iconPersonalSearch').attr("class","spinner-border spinner-border-sm mr-05");
});
  

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

 $("#PersonalModal").on('show.bs.modal', function () {
    $('#iconPersonalSearch').attr("class", "");
});
  

или этот

 $("#PersonalModal").on('show.bs.modal', function () {
    $('#iconPersonalSearch').removeClass('spinner-border spinner-border-sm mr-05');
});
  

Вопрос 1:
Успешно изменить стиль на загрузку после того, как я нажал кнопку, но когда я закрываю модальный и нажимаю снова, стиль больше не изменится (но модальный pop все еще работает). Могу ли я узнать, какая проблема вызвала это?

Модальное всплывающее окно после некоторых вычислений, выполненных из кода, созданного с помощью c#

 ScriptManager.RegisterStartupScript(this, this.GetType(), "Pop", "$('#PersonalModal').modal('show');", true);
  

На самом деле, наилучший эффект для этой функции должен заключаться в добавлении модального в верхнее окно,
Но когда я добавляю его в верхнее окно, кнопка первого нажатия может изменить стиль, а также модальное нажатие, второе нажатие на кнопку вообще не будет включать изменение стиля и модальное нажатие.

Я использую приведенный ниже код из code behind для добавления модального в верхнее окно

 ScriptManager.RegisterStartupScript(this, this.GetType(), "Pop", "var fatherBody = $(window.top.document.body);fatherBody.append($('#PersonalModal').modal('show'));", true);
  

Вопрос 2:
Как я могу позволить кнопке работать с изменением стиля, а также модальным отображением независимо от того, сколько раз я нажимаю на нее?

Комментарии:

1. Проверьте, не изменяется ли идентификатор элемента. Вы получаете какую-либо ошибку в окне консоли браузера?

2. почему вы выполняете полный вызов сервера только для отображения модального? На самом деле это не имеет смысла. Просто покажите модальность напрямую, используя jQuery внутри $("#btnPersonalSearch").click(function () { . Если вам нужно выполнить некоторую обработку на стороне сервера для заполнения модального, было бы намного лучше использовать AJAX для этого, тогда у вас не возникнет проблемы с полным обновлением страницы (что, я уверен, вероятно, вызывает или, по крайней мере, не помогает с проблемами, которые вы описываете).

3. Изменения вашего класса на iconPersonalSearch не должны оказывать никакого влияния на то, как работает кнопка. Я рекомендую использовать $().addClass("class list with spaces") и $().removeClass("same class list with spaces") — using .attr("class".. удалит любые другие классы, которых нет в списке классов, которые вы меняете. В любом случае, если вы удалите add / remove class / attr («класс»), вы можете быть уверены, что исключите это из своего расследования.

4. У @AmbrishPathak не появилось какой-либо связанной ошибки

5. @ADyson Да, перед модальным всплывающим окном необходимо выполнить множество вычислений, однако кнопка уже находится под панелью обновления, чтобы предотвратить полное обновление страницы…

Ответ №1:

Проблема решается с помощью приведенного ниже кода для addClass

 var prm = Sys.WebForms.PageRequestManager.getInstance();
if (prm != null) {
    prm.add_beginRequest(function (sender, e) {
        $('#iconPersonalSearch').addClass('spinner-border spinner-border-sm mr-05');
    });
}
prm.add_endRequest(function (sender, e) {
    if (sender._postBackSettings.panelsToUpdate != null) {
        $('#iconPersonalSearch').attr("class", "");    
    }
});