Konvertoval som bootstrap navbar na panel nástrojov a upravil rozbaľovaciu ponuku (vlastne dropup) tak, aby obsahovala 2 DatePicker prvky:
Problém je v tom, že keď vyberiem dátum, rozbaľovacia ponuka sa zrúti. Moje riešenie (som otvorený pre ostatných) je vytvoriť funkciu, ktorá otvorí rozbaľovaciu ponuku pridaním triedy "otvorené" a pridanie tejto funkcie do funkcie datepicker close ().
function leaveOpen(){
$("#dropdownMenu2").trigger("focus").attr("aria-expanded", "true");
$("#rangeDropdown").addClass("open");
}(jQuery);
Táto funkcia funguje správne, ale existuje iná funkcia bootstrap, ktorá prepína medzi "otvorené" trieda hneď späť:
Dropdown.prototype.toggle = function (e) {
var $this = $(this)
if ($this.is(".disabled, :disabled")) return
var $parent = getParent($this)
var isActive = $parent.hasClass("open")
clearMenus()
if (!isActive) {
...
var relatedTarget = { relatedTarget: this }
$parent.trigger(e = $.Event("show.bs.dropdown", relatedTarget))
...
$this
.trigger("focus")
.attr("aria-expanded", "true")
$parent
.toggleClass("open")
.trigger("shown.bs.dropdown", relatedTarget)
}
Tento JavaScript ma trochu ohromil. Čo k tomu dodať leaveOpen () aby sa zabránilo "otvorené" triedy od prepínania v rámci "Dropdown.prototype.toggle = funkcia (e)"?
odpovede:
0 pre odpoveď č. 1Skontrolovať to: https://jsfiddle.net/hoffmanc/y6sho3nv/9/
Existujú dva požadované preventívne mechanizmy AFAIK:
1) Zastavte skrytie rozbaľovacej ponuky po kliknutí na textové pole datepicker:
$(".datepicker").on("click", function (e) {
e.stopPropagation();
});
2) Zastavte skrytie rozbaľovacej ponuky po kliknutí na dátum v samotnom kalendári:
$(".dropdown").on("hide.bs.dropdown", function (e) {
if($(".datepicker-dropdown").length > 0) {
return false;
}
});