JQuery LiveQuery проблема - PullRequest
       11

JQuery LiveQuery проблема

0 голосов
/ 11 апреля 2009

я динамически загружаю HTML-элементы .. и использовал плагин livequery () для обработки событий кликов .. но можно щелкнуть только первый элемент.

вот мой начальный DOM:

 <div id="styleList">
            <h4 class="subPaneTitle blurred">List of themes</h4>
            <ul>
                <li class="listHeader"><span class="themeID">Theme ID</span><span class="themeName">Theme Name</span>
                                        <span class="themeAction">Action</span>
                </li>
            </ul>
            <p class="createNewStyle clearfix"><a id="createNewStyle" class="btnStyle1 blurred ui-corner-all">Create new theme</a></p>
        </div>

вот мой код для динамической загрузки элементов из xml:

    $.get("http://localhost/ShopNGo_Blitz_revised_w_YAML/site_styles_list.xml",loadAllThemes);


    function loadAllThemes(data){
    $(data).find("style").each(function(){
        var thisStyle = $(this);
        var styleID = thisStyle.attr('id');
        var styleName = thisStyle.attr('name');
        var styleStatus = "";
        if(thisStyle.attr('status') == "used"){
            styleStatus = '<span class="statusIndicator">Current theme</span>';
        }
        $("#styleList ul").append('<li><span class="themeID">'+ styleID + '</span><span class="themeName">' + styleName + '</span><span class="themeAction"><a id="themePreview">Preview</a></span><span class="themeAction"><a id="themeEdit">Edit</a></span><span class="themeAction"><a id="themeDelete">Delete</a></span><span class="themeAction"><a id="themeUse">Use</a></span>' + styleStatus + '</li>');

    });
}

вот мой код для события клика «Изменить»:

    $("div#styleList").find("ul").find("li").find("a#themeEdit").livequery("click",function(){ //this gets only the first element.
    var themeName = $(this).parent().prev().prev(".themeName").text();
    $("#siteStyleContent").tabs("select","#styleEditTabs");
    $("div#styleEditTabs").children("#themeName").text(themeName);
});

1 Ответ

2 голосов
/ 11 апреля 2009

Вы используете идентификаторы в качестве классов. Проверьте все эти вопросы, почему это плохо:

По сути, идентификаторы должны быть УНИКАЛЬНЫМИ. Когда у вас есть набор чего-либо (например, редактируйте ссылки), правильный способ сгруппировать их с помощью класса. При поиске #themeEdit jQuery предполагает, что есть только один, и возвращает первый, потому что так и должно быть. Вам нужно дать ссылки класс из themeEdit и искать их как .themeEdit.

Кроме того, jQuery 1.3 имеет встроенную функциональность live, поэтому, если вы используете это, вам не нужно переходить к плагину для чего-то подобного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...