0

物乞いで私は1つのulを持っています:

<div id="ul1DivId">
    <ul id="ul1Id">
        <li>li1</li>
    </ul>
</div>

このdiv/ulを非表示にし、別のulで別のdivを追加するJavaScriptがあります。

$(document).ready(function () {
$("#ul1Id > li").click(function() {
                    //to prevent scroll firing this handler:
        event.preventDefault();

        $("#ul1DivId").hide();
        var someValue = "someValue";
        var outputUl2Html = "<div id=\"ul2DivId\">" +
        "<ul id=\"ul2Id\">" +
        "<li id=\"liXId\">> " + someValue + "</li>" +
        "<li id=\"clearLiId\">-clear-</li>" +
        "</ul>" +
        "</div>";
        //show ul 2
        $(outputUl2Html).insertAfter('#ul1DivId');

});
});

style="display: none; "でdivに入るよりid="ul1DivId"。これは予想されます。そして、非表示のdiv要素の後に新しく挿入されたdivを取得します。これも予想されます。

クリックしても起動しない別のJavaScriptがありますclearLiId

$(document).ready(function () {
    $("#clearLiId").click(function() {
        //I never reach here!!!!
    });
});

セレクターとしてもやっ#ul2Id > liてみました。!#ul2Id > #clearLiIdをクリックしても、ハンドラーは起動されません。#clearLiId liなんで?クリックイベントをキャッチするにはどうすればよいですか?ul1DivId最初のdiv( )をもう一度表示して、現在のdiv()を削除したいと思いul2DivIdます。

4

2 に答える 2

2

live()セレクターがまだ存在しないため、関数を使用する必要があります。

現在および将来、現在のセレクターに一致するすべての要素にイベントハンドラーをアタッチします。

$(document).ready(function () {
    $("#clearLiId").live(function() {
        //I never reach here!!!!
    });
});
于 2012-06-19T13:18:10.713 に答える
2

引数が不足eventしているため、次のようなデリゲートイベントが必要です。

$(document).on('click', '#clearLiId', function() {
     //I never reach here!!!!
});


$("#ul1Id > li").click(function(event) {...
                                 ^ ----- missing event  

ノート

私は$("#ul1Id > li").あなたの最初のために働いているようですがul、それは将来ulのsのために働くことはありません。したがって、classそれぞれに割り当ててul(すでにDOMにあり、将来的には来る予定です)、セレクターを変更するとよいでしょう。例えば:

HTML

<div id="ul1DivId">
    <ul id="ul1Id" class="someClassToUl">
        <li>li1</li>
    </ul>
</div>

jQuery

$(".someClassToUl > li")...
于 2012-06-19T13:19:04.783 に答える