На странице jQuery у меня есть форма входа. Код достаточно прост:

<form method="post">
    <div data-role="fieldcontain">
        .... Form here
    </div>
</form>

Но следующая форма отправлена, JQM загружает следующую страницу через Ajax POST.

Проблема в том, что любой встроенный Javascript на этой новой странице НЕ инициализируется. Я не говорю об элементах $ (document) и т. Д., Все встроенные блоки Javascript не инициализированы.

Однако, если я добавлю

data-ajax="false"

С тегом формы, все в порядке. Страница загружена и правильно инициализирована.

Почему это происходит, и есть ли способ вызвать инициализацию страницы с загруженным содержимым ajax?

Я наблюдал это как на Firefox, так и на клиентах Android Webview.

0
A.Grandt 27 Янв 2013 в 15:22

3 ответа

Лучший ответ

Причина, по которой data-ajax="false" сработала в вашем случае, заключается в том, что это приведет к полной перезагрузке страницы, что случайно приведет к улучшению разметки страницы.

Это сегмент из документации jQuery Mobile:

Важно отметить, что если вы ссылаетесь с мобильной страницы, которая была загружена через Ajax, на страницу, содержащую несколько внутренних страниц, вам нужно добавить rel = "external" или data-ajax = "false" к ссылке. Это говорит фреймворку о необходимости полной перезагрузки страницы, чтобы очистить хеш Ajax в URL.

Теперь в вашем случае, если вы хотите улучшить содержание новой страницы, используйте это:

$('#pageID').trigger('create');

Или если вы также внесли изменения в верхний и нижний колонтитулы, используйте это:

$('#pageID').trigger('pagecreate');

Если вы хотите лучшего понимания, загляните в мой блог ARTICLE , где я подробно говорил об улучшении разметки содержимого страницы. Там вы найдете примеры функций, упомянутых сверху. Его также можно найти ЗДЕСЬ .

1
Community 23 Май 2017 в 12:13

Если вы загрузите свою страницу с реализацией jQuery Mobile по умолчанию (которая использует ajax), будут загружены только блоки скриптов на первой странице (<div data-role="page">).

Вы можете отключить загрузку ajax через mobileinit, что отключит загрузку ajax глобально, или вы можете отключить его через ссылку на источник.

$(document).on("mobileinit", function(){
    $.mobile.ajaxEnabled = false;
});

Или

<a data-role="button" data-ajax="false"
    href="myPageWithItsOwnScriptBlock.html">Link</a>

Если вы хотите продолжить использовать ajax-загрузку, вы можете поместить блок скрипта внутри вашей "страницы" <div>

<div data-role="page">
    <script src="myscript.js"></script>
    <div data-role="header">
    ....

Подробности здесь: http://jquerymobile.com/demos/1.2.0/docs /pages/page-scripting.html

1
andleer 27 Янв 2013 в 16:34

Попробуйте инкапсулировать свой встроенный JS-код во что-то вроде этого:

$(document).bind('pageinit', function(event) {
    // your inline code goes here
});
0
Stefan 27 Янв 2013 в 11:26