[JAVA] Was tun, wenn Sie das mit bootstrap-select erstellte Auswahlfeld nicht aktivieren können?

--Umgebung - CentOS Linux release 7.8.2003 (Core) - openjdk version "11.0.7" 2020-04-14 LTS - JSF 2.3.9 - jquery 3.2.1 - bootstrap 4.3.1 - bootstrap-select 1.13.14

Ereignis: Das durch Bootstrap-Auswahl erstellte Auswahlfeld kann nicht aktiviert werden

  1. Deaktivieren Sie das Auswahlfeld während der Erstanzeige
  2. Wenn das Kontrollkästchen geändert wird, wird die Aktivierung / Deaktivierung des Auswahlfelds durch das Ereignis "onchange" umgeschaltet.

Sollte nicht aktiviert werden ... a.gif

XHTML


<!--Kürzung-->
<h:form id="formId">
<h:panelGroup>
  <ui:remove>[verwenden]Kontrollkästchen</ui:remove>
  <h:selectBooleanCheckbox id="chekBox" value="#{sampleBean.chekBoxValue}" onchange="changeDisabled();" />
  <h:outputLabel value="verwenden" for="chekBox" />
</h:panelGroup>
<h:panelGroup>
  <ui:remove>Auswahlfeld</ui:remove>
  <h:selectOneMenu id="select" styleClass="selectpicker" value="#{sampleBean.selected}">
    <f:selectItems value="#{sampleBean.selectItems}" />
  </h:selectOneMenu>
</h:panelGroup>
</h:form>
<!--Kürzung-->

JavaScript


$(document).ready(function(){
    changeDisabled();
});

/**Wechseln Sie zwischen aktiven und inaktiven Auswahlfeldern. */
function changeDisabled() {
    /** @type {boolean}Kontrollkästchen Auswahlstatus. */
    var checked = $("#formId\\:chekBox").prop("checked");
    if (checked) {
        //aktivieren Sie
        $("#formId\\:select").removeAttr('disabled');
        $("#formId\\:select").next().children().removeClass('disabled');
    } else {
        //Inaktivieren
        $("#formId\\:select").attr('disabled', 'disabled');
        $("#formId\\:select").next().children().addClass('disabled');
    }
}

SampleBean


//Kürzung
public class SampleBean implements Serializable {
    /** serialVersionUID. */
    private static final long serialVersionUID = -6782548672735889274L;
    /**Wählen Sie die Kästchen aus. */
    @Getter
    private List<SelectItem> selectItems;
    /**Im Auswahlfeld ausgewählter Wert. */
    @Getter
    @Setter
    private Integer selected;
    @Getter
    @Setter
    private Boolean chekBoxValue = false;

    /**Bean-Initialisierungsprozess. */
    @PostConstruct
    public void init() {
        setSelectItems();
    }

    /**Auswahl treffen. */
    private void setSelectItems() {
        selectItems = new ArrayList<SelectItem>();
        selectItems.add(new SelectItem(0, "   "));
        selectItems.add(new SelectItem(1, "Inu"));
        selectItems.add(new SelectItem(2, "Katze"));
        selectItems.add(new SelectItem(3, "Saru"));
        selectItems.add(new SelectItem(4, "Ponsuke"));
    }
}

Ursache: Da der Zeitpunkt für die Ausführung des Deaktivierungsvorgangs zum Zeitpunkt der Erstanzeige "bereit" ist

Wenn ich mir die HTML-Ausgabe beim Debuggen des JavaScript anschaue, wurde das Bootstrap-Select-HTML wie "Onload" erstellt, also habe ich verschiedene Dinge ausprobiert. Als ich es versuchte, war die anfängliche Inaktivitätsverarbeitung der Anzeige dieselbe, aber es gab einen Unterschied in der Position, an der deaktiviert wurde, zwischen "bereit" und "Onload". Außerdem hat sich der Ort, an dem deaktiviert angehängt ist, geändert, wahrscheinlich weil sich der Ausgabe-HTML-Code je nach Version ändert.

Inaktive Behandlung


//Fügen Sie das Attribut disabled zum Auswahl-Tag hinzu
$("#formId\\:select").attr('disabled', 'disabled');
//Fügen Sie dem untergeordneten Tag des zu auswählenden Tags ein deaktiviertes Klassenattribut hinzu
$("#formId\\:select").next().children().addClass('disabled');

Legende) ★: Ein Tag, das im Ausgabe-HTML zu einem "untergeordneten Tag des nebenzuwählenden Tags" wird

bootstrap-select 1.13.14 1.13.14 1.6.3 1.6.3
Timing zum Deaktivieren ready onload ready onload
Mit deaktiviertem Attribut select select select select
Disabbled wird dem Klassenattribut hinzugefügt Top div,
button
Div direkt unter der Schaltfläche ★ button★,
li
button★,
Div neben Knopf
aria-Mit deaktiviertem Attribut button Keiner Keiner Keiner

Im Fall des Prozesses, der beim Umschalten zwischen aktiv und inaktiv mit JavaScript ausgeführt wurde, entsprach er nur dem Ort, an dem deaktiviert mit "onload" verbunden ist.

Aktivierungsbehandlung


$("#formId\\:select").removeAttr('disabled');
$("#formId\\:select").next().children().removeClass('disabled');

bootstrap-select 1.13.14

HTML-Ausgabe, wenn nicht deaktiviert

<div class="dropdown bootstrap-select">
  <select id="formId:select" name="formId:select" class="selectpicker" size="1" tabindex="-98">
    <option value="0">   </option>
    <option value="1">Inu</option>
    <option value="2">Katze</option>
    <option value="3">Saru</option>
    <option value="4">Ponsuke</option>
  </select>
  <button type="button" class="btn dropdown-toggle btn-light" data-toggle="dropdown" role="combobox" aria-owns="bs-select-1" aria-haspopup="listbox" aria-expanded="false" data-id="formId:select" title="Nothing selected">
    <div class="filter-option"><div class="filter-option-inner"><div class="filter-option-inner-inner">Nothing selected</div></div></div>
  </button>
  <div class="dropdown-menu ">
    <div class="inner show" role="listbox" id="bs-select-1" tabindex="-1">
      <ul class="dropdown-menu inner show" role="presentation"></ul>
    </div>
  </div>
</div>

HTML-Ausgabe bei Deaktivierung mit Bereit

<div class="dropdown bootstrap-select disabled">
  <select id="formId:select" name="formId:select" class="selectpicker" size="1" disabled="disabled" tabindex="-98">
<!--Weggelassen, da es das gleiche ist wie wenn es nicht deaktiviert ist-->
  <button type="button" class="btn dropdown-toggle disabled btn-light" data-toggle="dropdown" role="combobox" aria-owns="bs-select-1" aria-haspopup="listbox" aria-expanded="false" data-id="formId:select" tabindex="-1" aria-disabled="true" title="Nothing selected">
<!--Weggelassen, da es das gleiche ist wie wenn es nicht deaktiviert ist-->

HTML-Ausgabe bei Deaktivierung durch Onload

<!--Weggelassen, da es das gleiche ist wie wenn es nicht deaktiviert ist-->
  <select id="formId:select" name="formId:select" class="selectpicker" size="1" tabindex="-98" disabled="disabled">
<!--Weggelassen, da es das gleiche ist wie wenn es nicht deaktiviert ist-->
    <div class="filter-option disabled"><div class="filter-option-inner"><div class="filter-option-inner-inner">Nothing selected</div></div></div>
<!--Weggelassen, da es das gleiche ist wie wenn es nicht deaktiviert ist-->

bootstrap-select 1.6.3

HTML-Ausgabe, wenn nicht deaktiviert

<select id="formId:select" name="formId:select" class="selectpicker" size="1" style="display: none;">
  <option value="0">   </option>
  <option value="1">Inu</option>
  <option value="2">Katze</option>
  <option value="3">Saru</option>
  <option value="4">Ponsuke</option>
</select>
<div class="btn-group bootstrap-select">
  <button type="button" class="btn dropdown-toggle selectpicker btn-default" data-toggle="dropdown" data-id="formId:select" title="   ">
    <span class="filter-option pull-left">   </span>&nbsp;<span class="caret"></span>
  </button>
  <div class="dropdown-menu open">
    <ul class="dropdown-menu inner selectpicker" role="menu">
      <li data-original-index="0" class="selected"><a tabindex="0" class="" data-normalized-text="<span class=&quot;text&quot;>   </span>"><span class="text">   </span><span class="glyphicon glyphicon-ok check-mark"></span></a></li>
      <li data-original-index="1"><a tabindex="0" class="" data-normalized-text="<span class=&quot;text&quot;>Inu</span>"><span class="text">Inu</span><span class="glyphicon glyphicon-ok check-mark"></span></a></li>
      <li data-original-index="2"><a tabindex="0" class="" data-normalized-text="<span class=&quot;text&quot;>Katze</span>"><span class="text">Katze</span><span class="glyphicon glyphicon-ok check-mark"></span></a></li>
      <li data-original-index="3"><a tabindex="0" class="" data-normalized-text="<span class=&quot;text&quot;>Saru</span>"><span class="text">Saru</span><span class="glyphicon glyphicon-ok check-mark"></span></a></li>
      <li data-original-index="4"><a tabindex="0" class="" data-normalized-text="<span class=&quot;text&quot;>Ponsuke</span>"><span class="text">Ponsuke</span><span class="glyphicon glyphicon-ok check-mark"></span></a></li>
    </ul>
  </div>
</div>

HTML-Ausgabe bei Deaktivierung mit Bereit

<select id="formId:select" name="formId:select" class="selectpicker" size="1" disabled="disabled" style="display: none;">
<!--Weggelassen, da es das gleiche ist wie wenn es nicht deaktiviert ist-->
  <button type="button" class="btn dropdown-toggle selectpicker disabled btn-default" data-toggle="dropdown" data-id="formId:select" tabindex="-1" title="   ">
<!--Weggelassen, da es das gleiche ist wie wenn es nicht deaktiviert ist-->
      <li data-original-index="0" class="disabled selected"><a tabindex="-1" class="" data-normalized-text="<span class=&quot;text&quot;>   </span>" href="#"><span class="text">   </span><span class="glyphicon glyphicon-ok check-mark"></span></a></li>
      <li data-original-index="1" class="disabled"><a tabindex="-1" class="" data-normalized-text="<span class=&quot;text&quot;>Inu</span>" href="#"><span class="text">Inu</span><span class="glyphicon glyphicon-ok check-mark"></span></a></li>
      <li data-original-index="2" class="disabled"><a tabindex="-1" class="" data-normalized-text="<span class=&quot;text&quot;>Katze</span>" href="#"><span class="text">Katze</span><span class="glyphicon glyphicon-ok check-mark"></span></a></li>
      <li data-original-index="3" class="disabled"><a tabindex="-1" class="" data-normalized-text="<span class=&quot;text&quot;>Saru</span>" href="#"><span class="text">Saru</span><span class="glyphicon glyphicon-ok check-mark"></span></a></li>
      <li data-original-index="4" class="disabled"><a tabindex="-1" class="" data-normalized-text="<span class=&quot;text&quot;>Ponsuke</span>" href="#"><span class="text">Ponsuke</span><span class="glyphicon glyphicon-ok check-mark"></span></a></li>
<!--Weggelassen, da es das gleiche ist wie wenn es nicht deaktiviert ist-->

HTML-Ausgabe bei Deaktivierung durch Onload

<select id="formId:select" name="formId:select" class="selectpicker" size="1" disabled="disabled" style="display: none;">
<!--Weggelassen, da es das gleiche ist wie wenn es nicht deaktiviert ist-->
  <button type="button" class="btn dropdown-toggle selectpicker btn-default disabled" data-toggle="dropdown" data-id="formId:select" title="   ">
<!--Weggelassen, da es das gleiche ist wie wenn es nicht deaktiviert ist-->
  <div class="dropdown-menu open disabled">
<!--Weggelassen, da es das gleiche ist wie wenn es nicht deaktiviert ist-->

Gegenmaßnahme: Verwenden Sie "Onload", um zum Zeitpunkt der Erstanzeige zu deaktivieren.

a.gif

$(window).on('load', function(){
    changeDisabled();
});
//Kürzung

Recommended Posts

Was tun, wenn Sie das mit bootstrap-select erstellte Auswahlfeld nicht aktivieren können?
Was tun, wenn der Befehl Rails unbrauchbar wird?
Was tun, wenn Sie das Plug-In nicht vom Eclipse Marketplace installieren können?
Was tun, wenn Ihnen der von swagger-codegen-cli generierte Code nicht gefällt?
Was tun, wenn der Rails-Server nicht gestartet werden kann?
Was tun, wenn Sie den Text eines Elements in Selen nicht abrufen können?
[Schienen] Was tun, wenn mit der Fehlermethode keine Fehlermeldung angezeigt wird?
Was tun, wenn Sie Ihr Root-Passwort unter CentOS7 vergessen haben?
[Rails] Was tun, wenn Sie mit form_with keine Parameter abrufen können?
Was tun, wenn der Server-Tomcat stirbt?
Was tun, wenn Sie falsche Informationen eingeben?
Was tun, wenn Um die fehlende Version zu installieren, führen Sie `gem install bundler: 2.1.4` aus
Was tun, wenn die Installation des Debug-Gems fehlschlägt?
Was tun, wenn der Rails-Server nicht gestoppt werden kann?
Was tun, wenn Sie versehentlich ein Modell erstellen?
Was tun, wenn Sie Ihren API-Schlüssel nach der Bereitstellung auf Rails heroku nicht finden können?
Was tun, wenn Sie den Befehl "Java-Paketname / Klassenname" nicht ausführen können?
Was tun, wenn Sie das JDK, das Sie nach der Migration von bash nach zsh unter macOS in SDKMAN eingefügt haben, nicht finden können?
Was tun, wenn der Befehl adb nicht ausgeführt werden kann?
[Rails] Was tun, wenn Sie versehentlich eine Bundle-Installation in einer Produktionsumgebung in Ihrer lokalen Umgebung durchführen?
Was tun, wenn Sie die Listen-Adresse im Einstellungsbildschirm des Dockers Mattermost ändern?
Was tun, wenn Sie Ruby mit rbenv installiert haben, die Version sich jedoch nicht ändert?
Was tun, wenn Sie in Eclipse eine JRE auswählen und "Die ausgewählte JRE unterstützt die aktuelle Konformitätsstufe 11 nicht" erhalten?
[Ubuntu 20.04] Was tun, wenn der externe Monitor nicht erkannt wird?
Was tun, wenn in Docker ein gcc-Fehler auftritt?
Was tun, wenn die Validierung mit der Aktualisierungsaktion nicht funktioniert?
Was tun, wenn die Rails-Seite im Rails-Lernprogramm 1.3.2 nicht angezeigt wird?
Was tun, wenn Cloud 9 im Rails-Lernprogramm voll ist?
Hinweise, was zu tun ist, wenn das Eclipse Maven-Abhängigkeitsglas nicht korrekt ist
Was tun, wenn Sie sich über OpenSSL mit pyenv install ärgern?
Was tun, wenn die App nicht mit der neuesten Rails-Version erstellt wurde, die bei neuen Rails installiert wurde?
Was tun, wenn Sie in Thymeleaf Layout eine groovige Warnung erhalten?
Was tun, wenn das Hintergrundbild nach der Bereitstellung nicht angewendet wird?
Was tun, wenn das Präfix c in JSP nicht gebunden ist?
Was tun, wenn Sie gem'bcrypt 'in Ihre Gemfile eingeben und bei der Bundle-Installation eine Fehlermeldung erhalten?
Was tun, wenn das von refile gepostete Bild nach dem Einstellen der 404-Fehlerseite in Rails verschwindet?
Was tun, wenn der Vorgang nicht zulässig ist, wenn ein Befehl im Terminal ausgeführt wird?
Was tun, wenn in CircleCI der Fehler zu lang ohne Ausgabe (über 10 m0s) angezeigt wird?
[Rails / Docker] Was tun, wenn der Browser (localhost: 3000) nach dem Hinzufügen eines Edelsteins den Zugriff verweigert?
Was tun, wenn auf GitHub eine MiniMagick-Sicherheitsanfälligkeitswarnung angezeigt wird?
[Gradle] [checkstyle] Was tun, wenn die aktive Einstellung von Checkstyle durch "Gradle-Projekt aktualisieren" aus Eclipse entfernt wird?
Was tun, wenn der Build mit dem Fehler "Mit Swift x.x.x kompiliertes Modul kann vom Swift x.x.x-Compiler nicht importiert werden" fehlschlägt.
Was tun, wenn die Meldung "Ein Server läuft bereits" angezeigt wird. Fehler beim Versuch, den Rails-Server zu starten
Was tun, wenn eine javax.net.ssl.SSLHandshakeException angezeigt wird: Remote-Host hat während des Handshakes im IBM JDK die Verbindung geschlossen
Was tun, wenn Sie aktiviert haben? Verwenden Sie die WSL2-basierte Engine in Docker Desktop mit unzureichender WSL2-Installation
So übersetzen Sie die Fehlermeldung ins Japanische (Was tun, wenn Sie sich aus irgendeinem Grund nicht anmelden können)
Was tun, wenn Sie Gemfile oder .bundle / directory nicht finden konnten?