1

この質問は以前に何度も尋ねられており、他の質問を見ましたが、提案された修正は私には当てはまりませんでした。

問題は、関数.click内のハンドラーが2 回発生していることです。collapseFieldsets()

ここに私のinit関数があります:

$(document).ready(function() {

    navigation_setup();

    collapseFieldsets();

    $('input[placeholder], textarea[placeholder]').placeholder();

    $(window).resize( function() {

        var width = $(window).width();
        $('h1').css('display', width < 1000 ? 'none' : 'block');
    } );
});

これは私のcollapseFieldsetsです:

function collapseFieldsets() {

    $("fieldset.collapseable legend").css("cursor", "pointer");
    $("fieldset.collapseable legend label").css("cursor", "pointer");

    $("fieldset.collapsed div.fieldsetContent").hide();

    $("fieldset.collapseable legend").click(function(event) {

        var fieldsetContent = $(this).parent().find("div.fieldsetContent");

        fieldsetContent.toggle(200);
    });
}

そして、これは私のHTMLがどのように見えるかです:

<fieldset class="collapseable">
    <legend><label><input checked="checked" name="ClientUpdate" type="radio" value="Current" /> Mr John Smith</label></legend>
    <div class="fieldsetContent">

        <input id="ClientCurrent_PersonId" name="ClientCurrent.PersonId" type="hidden" value="9" />

        <!-- More input elements etc -->

    </div>
</fieldset>

collapseFieldsets関数は一度だけ呼び出されます-呼び出しを挿入するとalert、それらは一度だけ表示されます。

jQuery 1.9.1 を使用していますが、1.8.0 でも発生します。

4

1 に答える 1

3

チェックボックスは、親に伝播 (および処理) されるクリック イベントをトリガーします。

凡例にクリックイベントを配置する必要がありますか? これを変更した場合:

$("fieldset.collapseable legend").click(function(event){...})

これに:

 $("fieldset.collapseable input").click(function(event){
    var fieldsetContent = $(this).parentsUntil('.collapseable').parent().find("div.fieldsetContent");

    fieldsetContent.toggle(200);
 })

うまくいきます。

または、凡例にバインドされたイベントで false を返して、伝播を防ぐことができます

于 2013-02-10T07:17:27.273 に答える