Schaltfläche innerhalb eines Etiketts

Lesezeit: 5 Minuten

Benutzeravatar von nikoletta
Nikoletta

Ich habe ein label mit “for="the pointer to the checkbox input"„Und solange ich weiß, das for kann nur für hinzugefügt werden label. Daher muss ich innerhalb von hinzufügen label a <button>(Ich brauche es), aber das Klickereignis funktioniert nicht richtig – es aktiviert das Kontrollkästchen nicht for zeigt auf.

Was sind die Möglichkeiten, die ich hier verwenden kann, wenn ich platzieren muss <button> innerhalb der label, nur mit html+css codieren?

etwas Code zum Beispiel:

<input type="checkbox" id="thecheckbox" name="thecheckbox">
<div for="thecheckbox"><button type="button">Click Me</button></div>

  • Die eigentliche Frage ist also, wie kann ich das Kontrollkästchen umschalten, indem ich auf die Schaltfläche klicke? Ich kenne keine Nicht-JS-Antwort auf diese Frage. Vermutlich funktioniert es nicht, weil der Button den Klick für sich erfasst und gar nicht an das Label weitergibt. Ich frage mich allerdings, warum du das überhaupt willst. Es klingt für mich nach einer sehr verwirrenden UX. Wenn Sie fortfahren möchten, können Sie erwägen, ein Element so zu gestalten, dass es wie eine Schaltfläche aussieht.

    – GolezTrol

    28. Mai 2016 um 22:43 Uhr


  • Ja, ich habe nur versucht, so viele Informationen wie möglich zu geben

    – Nikoletta

    28. Mai 2016 um 22:44 Uhr

  • Geben Sie bitte Ihren Code an und warum Sie einen haben müssenlabel Verpackung a button ?

    – Dippas

    28. Mai 2016 um 22:48 Uhr


  • Kannst du nicht <label onclick="function()" style="cursor:pointer"> ?

    – Randy

    28. Mai 2016 um 22:56 Uhr


  • Mein Code wird hier nicht benötigt. Ich werde Eingaben mit Beschriftung und Schaltfläche posten, wenn Sie möchten, aber ich denke, es ist nutzlos.

    – Nikoletta

    28. Mai 2016 um 22:57 Uhr

Es stellt sich heraus, dass Sie eine machen können <button> einen Eingang bedienen, aber nur wenn Sie den setzen <label> Innerhalb das <button>.

<button type="button">
  <label for="my-checkbox">Button go outside the label</label>
</button>
<input type="checkbox" id="my-checkbox">

Obwohl dies gegen die W3C-Spezifikationen verstößt:

Die Beschriftung des interaktiven Elements darf nicht als Nachkomme des Schaltflächenelements erscheinen.
https://www.w3.org/TR/html-markup/label.html

  • Das Problem dabei ist, wenn Sie auf die Schaltfläche und nicht auf den Text klicken, löst die Beschriftung den Klick nicht aus.

    – escarello

    27. Dezember 2017 um 16:45 Uhr

  • Ich denke, wenn Sie in der Welt des Klebens von Etiketten in Schaltflächen sind, sollten Sie darauf vorbereitet sein, etwas CSS zu benötigen;)

    – Sinetheta

    28. Dezember 2017 um 23:38 Uhr

  • Dies funktioniert nicht mit der Tastatur – das Drücken der Taste bewirkt nichts.

    – Actimel

    22. Juli 2019 um 9:46 Uhr


  • @epascarello Hier geht es nur um den Auslösebereich des Labels. Sie können zum Beispiel den Button {position: relative;} und ein Pseudoelement für das Label wie label::after { content: ”; Position: absolut; Breite: 100 %; Höhe: 100 %; } um diesen Bereich zu erweitern.

    – Sebilasse

    17. April 2021 um 12:09 Uhr


Benutzeravatar von nikk wong
Nikk Wong

Sie können dies tun:

<label>
 <button></button>
</label>

CSS

label {
    cursor: pointer; // not necessary but probably a good idea.
    display: block; // depending on your structure.
}
button {
    pointer-events: none;
}

Das display: block on label ist nur erforderlich, damit der Begrenzungsrahmen des Labels seine untergeordneten Elemente (in diesem Fall die Schaltfläche) vollständig einschließt.

Sie können ein transparentes Pseudoelement verwenden, das das Kontrollkästchen und die Schaltfläche selbst überlagert, die Mausereignisse abfängt.

Hier ist ein Beispiel:

html:

<label>
  <input type="checkbox">
  <button class="disable">button</button>
</label>

CSS:

.disable{pointer-events:fill}
label{position:relative}
label:after{
  position: absolute;
  content: "";
  width: 100%;
  height: 100%;
  background: transparent;
  top:0;
  left:0;
  right:0;
  bottom:0;
}

  • Ich weiß, was du meinst, Kumpel, auch wenn dein Code ein bisschen falsch ist, aber ich habe über diese Idee nachgedacht. Es ist kein guter, ich brauche den <button> angeklickt werden.

    – Nikoletta

    28. Mai 2016 um 23:05 Uhr


  • Ich glaube nicht, dass das möglich ist, was Sie dann versuchen. Damit zwei Ereignisse bei einem einzigen Klick ausgelöst werden (das Label-Klick-Ereignis und das Schaltflächen-Klick-Ereignis). Es ist eines von beidem. In diesem Fall müssen Sie Javascript verwenden.

    – eboye

    28. Mai 2016 um 23:07 Uhr

HTML:

<label for="whatev"
       onclick="onClickHandler">
    <button>Imma button, I prevent things</button>
</label>

JS:

const onClickHandler = (e) => {
    if(e.target!==e.currentTarget) e.currentTarget.click()
}

Target ist das Klickziel, currentTarget ist in diesem Fall das Label.

Ohne die if-Anweisung wird das Ereignis zweimal ausgelöst, wenn außerhalb des Ereignisverhinderungsbereichs geklickt wird.

Nicht browserübergreifend getestet.

Die beste Lösung ist, Stil ist wie ein Knopf.

Wenn Sie ein CSS-Framework wie Bootstrap verwenden, können Sie den Label-Klassen wie btn und btn-default zuweisen. Dadurch wird es wie ein Knopf gestaltet. Möglicherweise müssen Sie die CSS-Eigenschaft der Zeilenhöhe manuell wie folgt anpassen:

label.btn {
    line-height: 1.75em;
}

Um dann die On-Click-Stile als Schaltfläche zu erhalten, fügen Sie diese Stile hinzu:

input[type=radio]:checked ~ label.btn {
    background-color: #e6e6e6;
    border-color: #adadad;
    color: #333;
}

Dies nimmt die überprüfte Eingabe und gibt das nächste Label-Element im Dom aus, das die Stile der Klasse btn, bootstrap btn-default button clicked hat. Passen Sie die Farben an, wie es passt.

Benutzeravatar von Marius Potor
Marius Potor

Was ich gemacht habe ist folgendes:

<label htmlFor="fileUpload">
  <button onclick="onButtonClick">upload</button>
</label>
<input id="fileUpload" type="file" style="display: none"/>

onButtonClick() {
  document.getElementById('fileUpload').click();
}

1433950cookie-checkSchaltfläche innerhalb eines Etiketts

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy