2014-10-20 5 views
0

У меня есть форма регистрации пользователя с некоторой информацией. При отправке выполняется ajax-вызов, который вставляет данные в БД и возвращает код состояния. В зависимости от статуса я показываю div. У div есть начальный класс «скрытый» и кнопка закрытия. По возвращении из php я удаляю «скрытый» класс и добавляю класс «alert-danger» или «alert-success».Класс добавления/удаления JQuery не работает во второй раз

После того, как пользователь нажимает кнопку «закрыть» (x), я снова добавляю «скрытый» класс и проверяю, имеет ли элемент класс «опасность оповещения» или «предупреждение-успех» и удаляет его. Это работает (или, по крайней мере, скрывается) в первый раз. Однако div не появляется во второй раз.

Что мне здесь не хватает?

Вот ДИВ

<div class="alert alert-block fade in status hidden"> 
<button type="button" class="close" data-dismiss="alert">&times;</button> 
<h4 class="message-head"></h4> 
<p class="message"></p> 
</div> 

Вот код запуска на успех/ошибка

$.ajax({ 
    type:"post", 
    url:"register.php", 
    data:"name="+name+"&phone="+phone+"&email="+email+"&msg="+msg, 
    success:function(data){ 

    if(data.status === 'success'){ 
    //show the status msg 
    $('.message-head').text("Thank You"); 
    $('.message').text("Your Request has been taken"); 
    $(".status").removeClass("hidden").addClass('alert-success'); 

     }else { 
    $('.message-head').text("Sorry"); 
    $('.message').text("There is some Error. Please Try Again Later"); 
    //alert(data.status); 
    $('.status').removeClass('hidden').addClass('alert-danger'); 
}} 

А вот код для кнопки закрытия нажмите

$('.close').click(function(){ 
if ($('.status').hasClass("alert-danger")) { 
$('.status').removeClass("alert-danger").addClass("hidden"); 
}else if ($('.status').hasClass("alert-success")) { 
$('.status').removeClass("alert-success").addClass("hidden"); 
} 
}); 
+1

добавить точку останова (отладчик) для вашего закрытого клика. Проверьте, что находится в селекторе $ (". Status"), когда вы делаете это во второй раз. –

+0

Вы используете бутстрап-предупреждение? Закрытие предупреждения ** удаляет элемент из dom **. Так что, наверное, это то, что здесь происходит. Возможно, попробуйте использовать функции bootstrap '$(). Alert()'. –

+0

Mathieu - Я проверил инструмент разработчика. Что происходит, когда я нажимаю кнопку «закрыть», весь div исчезает. И, следовательно, нет возможности загрузить его во второй раз. – sisyphus

ответ

0

Я не совсем конечно, но я считаю, что закрытие предупреждений Bootstrap должно работать из коробки, когда вы открываете их с помощью bootstra Функция JS.

Это должно работать для открытия:

$('.message-head').text("Thank You"); 
$('.message').text("Your Request has been taken"); 
$('.alert').alert(); 

Код для закрытия предупреждения не требуется, потому что тревога автоматически закрывается, как в начальной загрузки, например http://getbootstrap.com/javascript/#alerts

EDIT: Другой подход должен был бы создайте предупреждение с помощью javascript. Это было бы решением обеих проблем. (См JSFiddle)

+0

Спасибо. Это откроет предупреждение, и закрытие будет автоматически, как вы сказали. Но здесь есть две проблемы: 1. Предупреждение-предупреждение или предупреждение-предупреждение не могут быть применены. и 2.Как только мы закроем, элемент будет удален из dom и не появится снова, если пользователь повторно отправит форму – sisyphus

1

Я собрал простой скрипку для вас

Ссылка: http://jsfiddle.net/qyyegwhu/1/

Вы включая класс .hidden в CSS:

.hidden{ 
    display: none; 
} 

У меня возникли проблемы тиражирование проблема иначе?

+0

Странно, что в вашем примере она отлично работает, но не тогда, когда я использую ваш код в новом файле. Случилось так, что в первый раз пришло предупреждение. Но когда я нажимаю «закрыть», весь div исчезает. Я попробовал скрытый класс из bootstrap, но я также попытался сделать это в css. – sisyphus

Смежные вопросы