9

クリックイベントのラベルとバインディングに1つの選択を追加すると、jqueryが2回起動します。

http://jsfiddle.net/d8Ax7/

html:

<label class="lol">
    <div>
        bla
    </div>
    <div style="display:none;">
        <select></select>
    </div>
</label>

JavaScript:

$("label.lol").on({
    click : function ()
    {
        alert(1);
    }
})

ラベルに「for」属性を追加せずにこのバグを修正するにはどうすればよいですか?

4

9 に答える 9

5

この質問にはすでに多くの答えがあることは知っていますが、あいまいです。

$("label.lol").on({
    click : function ()
    {
        alert(1);
        return false;
    }
});

わかりました、誰もが感謝しています。問題が解決しました。しかし、なぜ疑問が生じreturn false;ます。

簡単な言葉で答えてください:これは、関数から戻ったことをコンピューターに伝える方法であり、私があなたに与えたタスクは完了しました。これ以上混乱する必要はありません。

于 2013-02-08T15:36:11.913 に答える
0

詳細については、このスタック オーバーフローの質問を確認してください。要約すると、これを試してみてください...

$("label.lol").click(function () {
        alert(1);
        return false;
});
于 2013-02-08T15:29:33.883 に答える
0

あなたのマークアップは恐ろしいです..あなたの問題は、jqueryがラベル関数内の各divでクリックイベントを実行していることです-つまり2回です。マークアップをきれいにして、クリック可能にしたい div を直接尋ねる必要があります。それ以外の場合は、:first を使用して、イベントが 1 回だけ発生するようにします。

$('.lol div:first').click(function ()
{
    alert("1");
})
于 2013-02-08T15:29:50.837 に答える
0

問題は、要素間の区別にあります。たとえば、:first-childセレクターでラベルの最初の子を選択するか、次のように指定する必要がありますid

HTML:

<label class="lol">
    <div id="first-child">
        bla
    </div>
    <div style="display:none;">
        <select></select>
    </div>
</label>

JS:

$("#first-child").on('click',function (){
        alert(1);
});

http://jsfiddle.net/d8Ax7/5/

于 2013-02-08T15:44:18.980 に答える
0

e.preventDefault(); を追加する必要があります。

$("label.lol").on({
  click : function (e)
  {
    alert(1);
    e.preventDefault();
  }
});
于 2013-02-08T15:31:20.840 に答える
0
$("label.lol").off("click").on(//...

しかし、2回起動している場合は、2回バインドしたことを意味するので、.offを使用することは、このイベントを2回バインドする方法を理解するという問題の最善の解決策よりもハックです...そして確かにあなたが示すコードこの二重束縛は説明できない

編集:&あなたのフィドルでは、実際には一度だけトリガーされます...

于 2013-02-08T15:24:19.407 に答える
0

clickedCSS でフィルタリングしてみてください: 2 番目のアラート (またはその他のアクション) を防止する中間クラスを追加.clickedし、次のラウンドに備えて を削除します。

$("label.lol").on({
    click : function ()
    {
        if (! $(this).hasClass('clicked'))
            alert(1);
        $(this).toggleClass('clicked');
    }
})
于 2013-02-08T16:01:05.237 に答える