Reputation: 85
I want to show alert of Bootstrap when ajax returns. But the alert flushed and then disappear very quickly. What is the right way to show an alert with Bootstrap? thanks.
$('#btn').click(function () {
var url = "add";
var data = $('#add_form').serializeArray().reduce(function(m,o){ m[o.name] = o.value; return m;}, {});
$.ajax({
type: 'POST',
url: url,
data: JSON.stringify(data),
dataType: 'json',
contentType : 'application/json',
// async: false,
success: function(data2) {
if (data2.res == 1) {
showalert("Error", "alert-danger");
} else {
showalert("OK", "alert-success");
}
},
error: function(result)
{
},
timeout: 5000
});
});
function showalert(message, alerttype) {
$('#alert_placeholder').append('<div id="alertdiv" class="alert ' + alerttype + '" role="alert"><button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>' + message + '</div>');
setTimeout(function() {
$("#alertdiv").remove();
}, 5000);
}
<div id = "alert_placeholder"></div>
...
<form id="add_form" method="post">
...
<div class="form-group row">
<div class="offset-2 col-10">
<!-- <button type="submit" id="btn" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">Submit</button> -->
<button type="submit" id="btn" class="btn btn-primary">Submit</button>
</div>
</div>
Upvotes: 3
Views: 2718
Reputation: 1
<div class="form-group row">
<div class="offset-2 col-10">
<!--<button type="submit" id="btn" class="btn btn-primary">Submit</button>-->
<button type="button" id="btn" class="btn btn-primary">Submit</button>
</div>
</div>
Upvotes: 0
Reputation: 85
I find the problem at last. I changes the button's (which is trigger the js code) type "submit"->"button", and everything works well.
I am not sure why that way yet.
<div class="form-group row">
<div class="offset-2 col-10">
<!--<button type="submit" id="btn" class="btn btn-primary">Submit</button>-->
<button type="button" id="btn" class="btn btn-primary">Submit</button>
</div>
</div>
Upvotes: 1
Reputation: 36
With fadeIn Property Or You Can Use ""addClass"" to animate bootstrap div .
If you want Only animated alert box.
function showalert(message, alerttype) {
$('#alert_placeholder').fadeIn('<div id="alertdiv" class="alert ' + alerttype + '" role="alert"><button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>' + message + '</div>');
setTimeout(function() {
$("#alertdiv").remove();
}, 5000);
}
Upvotes: 0
Reputation: 4366
I would do it different, you can put directly the alert message in yout HTML and play with show()
, hide()
, fadeIn()
or fadeOut()
:
<div id="alertError" class="alert alert-danger" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span></button>
Error
</div>
<div id="alertSuccess" class="alert alert-success" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span></button>
Success
</div>
...
<form id="add_form" method="post">
...
<div class="form-group row">
<div class="offset-2 col-10">
<!-- <button type="submit" id="btn" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">Submit</button> -->
<button type="submit" id="btn" class="btn btn-primary">Submit</button>
</div>
</div>
And now in the javascript you dont need that function, remember put $(document).ready
:
$(document).ready(function () {
$('#btn').click(function () {
var url = "add";
var data = $('#add_form').serializeArray().reduce(function(m,o){ m[o.name] = o.value; return m;}, {});
$.ajax({
type: 'POST',
url: url,
data: JSON.stringify(data),
dataType: 'json',
contentType : 'application/json',
// async: false,
success: function(data2) {
if (data2.res == 1) {
$(#alertError).show() //or fadeIn
setTimeout(function() {
$("#alertError").hide(); //or fadeOut
}, 5000);
} else {
$(#alertSuccess).show() //or fadeIn
setTimeout(function() {
$("#alertSuccess").hide(); //or fadeOut
}, 5000);
}
},
error: function(result)
{
},
timeout: 5000
});
})
});
Remember change your css file and display none alerts divs:
#alertError,#alertSuccess{
display:none;
}
Upvotes: 1