Присоединение обработчиков событий для динамически создаваемых страниц jQuery Mobile - PullRequest
1 голос
/ 23 января 2012

В моем приложении jQuery Mobile я создаю несколько динамических страниц. Вот код

function createPages()
{
    $header = "<header data-role='header'><h1>Dynamically created pages</h1></header>";
    $content = "<div data-role='content' class='content'><p>This is a dynamically generated page</p></div>";
    $footer = "<div data-role='footer'><h1>Audimax</h1></footer>";

    for($i=1;$i<=5;$i++)
    {   
        $section= "<section id='"+"#fav"+$i+"' data-role='page' data-url='"+"fav"+$i+"' class='dynamic'>";
        $new_page = $($section+$header+$content+$footer+"</section>");
        $new_page.appendTo($.mobile.pageContainer);

    }
}

Страницы создаются правильно и добавляются в DOM, и я могу перейти к ним.Проблема в том, что я просто не могу прикрепить обработчики событий к динамическим страницам. Я использую идентификаторы динамических страниц с jquery "live", но безрезультатно. Любая помощь очень ценится.

Ответы [ 2 ]

1 голос
/ 02 августа 2012

Обновите ядро ​​jquery до 1.7.1 с http://jquery.com/download/

, а затем

$(selector).live( eventName, function(){} );

. Может быть заменено на подпись

$(document).on( eventName, selector, function(){} );

Itзатем работает для динамических элементов.

1 голос
/ 23 января 2012

Почему бы не привязать обработчики событий при добавлении новой псевдостраницы в DOM?

function pageShowFunction () {
    console.log(this.id + ' has triggered the `pageShow` event!');
}
function createPages()
{
    $header = "...";
    $content = "...";
    $footer = "...";

    for($i=1;$i<=5;$i++)
    {   
        $section= "<section id='"+"#fav"+$i+"' data-role='page' data-url='"+"fav"+$i+"' class='dynamic'>";
        $new_page = $($section+$header+$content+$footer+"</section>").bind('pageshow', pageShowFunction);
        $new_page.appendTo($.mobile.pageContainer);

    }
}

Обычно лучше привязывать напрямую к элементам, чем делегировать обработку события.

PS Вы не опубликовали свой код привязки к событию, поэтому я не могу дать какие-либо конкретные комментарии по этому коду, возможно, вы сможете обновить свой вопрос с помощью этого кода, если это не решит вашу проблему.

...