【发布时间】:2018-02-21 11:24:19
【问题描述】:
我有一个简单的日期范围搜索表单,其中包含使用引导程序的“高级选项”下拉菜单。我的问题是,当用户在显示高级下拉列表时按下提交按钮时,它在不同浏览器中具有不同的行为。 在 IE 中,下拉菜单关闭,表单将被提交。在 Chrome 中,下拉菜单关闭,但我必须再次单击提交按钮才能提交表单。
如果我拦截按钮单击事件并手动提交,那么我可以在 Chrome 中单击一次,但随后表单在 IE 中提交两次。
有什么方法可以在两个浏览器中获得一致的行为?
https://jsfiddle.net/joeykruger75/bv8dshu8/
$('#date-range-box').daterangepicker({
"startDate": "07/14/2017",
"endDate": "07/20/2017"
});
$('.dropdown-menu').click(function(e) {
e.stopPropagation(); //This will prevent the event from bubbling up and close the dropdown when you type/click on text boxes.
});
$('#search-form').submit(function(ev) {
ev.preventDefault();
showMsg('submitted');
});
function showMsg(msg) {
var options = {
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
year: "numeric",
month: "2-digit",
useGrouping: "false"
};
var dateS = new Date().toLocaleString('en-GB', options);
toastr.options.positionClass = "toast-bottom-right";
toastr.info(msg + ' - ' + dateS, {
"positionClass": "toast-bottom-right",
});
}
body {
padding-top: 50px;
}
.dropdown.dropdown-lg .dropdown-menu {
margin-top: -1px;
padding: 6px 20px;
}
.input-group-btn .btn-group {
display: flex !important;
}
.btn-group .btn {
border-radius: 0;
margin-left: -1px;
}
.btn-group .btn:last-child {
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
}
.btn-group .form-horizontal .btn[type="submit"] {
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
}
.form-horizontal .form-group {
margin-left: 0;
margin-right: 0;
}
.form-group .form-control:last-child {
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
}
@media screen and (min-width: 768px) {
#adv-search {
width: 400px;
margin: 0 auto;
}
.dropdown.dropdown-lg {
position: static !important;
}
.dropdown.dropdown-lg .dropdown-menu {
min-width: 400px;
}
}
<script src="https://cdn.jsdelivr.net/momentjs/latest/moment.min.js"></script>
<link href="https://cdn.jsdelivr.net/bootstrap.daterangepicker/2/daterangepicker.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css" rel="stylesheet" />
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdn.jsdelivr.net/bootstrap.daterangepicker/2/daterangepicker.js"></script>
<form name="myform" id="search-form" class="form-horizontal" role="form">
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="input-group" id="adv-search">
<input type="text" class="form-control" placeholder="Search for snippets" id="date-range-box" />
<div class="input-group-btn">
<div class="btn-group" role="group">
<div class="dropdown dropdown-lg">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false">Advanced <span class="caret"></span></button>
<div class="dropdown-menu dropdown-menu-right" role="menu">
<div class="form-group">
<label for="filter">Location</label>
<select class="form-control">
<option value="0" selected>All Locations</option>
<option value="1">Location #1</option>
<option value="2">Location #2</option>
<option value="3">Location #3</option>
<option value="4">Location #4</option>
</select>
</div>
<div class="form-group">
<label for="filter">Product</label>
<select class="form-control">
<option value="0" selected>All Products</option>
<option value="1">Product #1</option>
<option value="2">Product #2</option>
<option value="3">Product #3</option>
<option value="4">Product #4</option>
<option value="4">Product #5</option>
</select>
</div>
<div class="form-group">
<label for="contain">Customer Ref</label>
<input class="form-control" type="text" />
</div>
</div>
</div>
<button type="submit" class="btn btn-primary"><span class="glyphicon glyphicon-search" aria-hidden="true"></span></button>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
【问题讨论】:
-
我发现当下拉菜单显示为“dropdown-backdrop”类且z-index为990时,有一个隐藏的div会显示在chrome中。奇怪的是,这个div无处可去在 IE 中可以看到,但这意味着搜索按钮实际上并没有被点击。如果我添加以下 CSS,那么问题就解决了。目前还没有发现任何副作用:
.dropdown-backdrop { display: none; }
标签: javascript twitter-bootstrap forms cross-browser