2016-05-28 3 views
7

for="the pointer to the checkbox input"」のlabelがあります。私が知る限り、forlabelにのみ追加できます。したがって、labelの中に<button>(私が必要です)の内部を追加する必要がありますが、クリックイベントが正しく機能していません - forが指しているチェックボックスをチェックしません。ラベル内のボタン

私だけのhtml + CSSコーディングとlabel内部<button>を配置しなければならない場合、私はここに使用できる可能性は何ですか?

例えば、いくつかのコード:

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

実際の問題は、どうすればボタンをクリックしてチェックボックスを切り替えることができますか?私はその質問に対するJS以外の答えを知らない。ボタンはそれ自身のクリックをキャプチャし、ラベルにまったく渡さないため、おそらく動作しません。なぜ私は最初の場所でこれをしたいのだろうかと思います。それは私にとって非常に混乱しているUXのように思えます。続行したい場合、要素をボタンのような外観にスタイリングすることを検討することができます。 – GolezTrol

+0

はい、私はできるだけ多くの情報を提供しようとしていました – nikoletta

+0

あなたのコードを提供してください、なぜあなたは 'ボタン 'をラップして' label'を持っている必要がありますか? – dippas

答えて

2

あなたはマウスイベントをキャッチするチェックボックスとボタン自体にオーバーレイする透明擬似要素を使用することができます。

はここに例を示します

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; 
} 
+0

私はあなたが何を意味するのか知っています、あなたのコードは少し間違っていますが、私は思ったこの考え方についてそれは良いものではない、私は '

+1

私はそれがあなたがしようとしていることは考えられません。ワンクリックで2つのイベントを発生させる(ラベルクリックイベントとボタンクリックイベント)。それはそれらのどちらかです。その場合はjavascriptを使用する必要があります。 – eboye

0

私はあなたがチェックボックスを使用する通常の方法を使用して、CSSスタイルを使用する必要がありますことをお勧めそれはボタンのように見えるように私はあなたがボタンとボタンの外観を取得しようとしているボタンを必要とは思わないボタンとして使用するためには、 sがそれはあなたが<button><label>を置く場合にのみ、あなたは<button>が入力を動作させることができ判明、しかし、彼らは

4

のために作られているために、タグを使用します。

これはW3Cの仕様に違反が

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

インタラクティブ要素のラベルは、ボタン要素の子孫として現れてはなりません。 https://www.w3.org/TR/html-markup/label.html

+1

この問題は、テキストではなくボタンをクリックすると、ラベルがクリックをトリガーしないことになります。 – epascarello

+0

ボタンの内側にラベルを貼っているのであれば、CSSが必要になるはずです。 – Sinetheta

0

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() 
} 

ターゲットクリック対象である、は、currentTargetは、この場合にはラベルです。

ifステートメントがないと、イベントはイベント防止領域の外側でクリックされた場合、2回起動されます。

ブラウザでテストされていません。

1

最高の解決策は、ボタンのようなスタイルにすることです。

ブートストラップなどのCSSフレームワークを使用している場合は、btnやbtn-defaultなどのラベルクラスを指定できます。これはボタンのようなスタイルになります。あなたはそのように手動で行の高さのCSSプロパティを調整する必要があります。

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

その後、ボタンとしてクリックスタイルに取得するには、これらのスタイルを追加します。

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

これがかかりますその入力がチェックされ、クラスbtnを持つdom内の次のlabel要素を与え、btn-defaultボタンのクリックされたスタイルをブートストラップします。色を適切に調整します。

関連する問題