jQuery не запускается <script>, когда метод AJAX $ .load () вызывается событием Click - PullRequest
0 голосов
/ 27 декабря 2011

Я боролся с этим некоторое время и не могу понять это. Надеюсь, это что-то очевидное, что я пропустил.

Вот код:

$(document).ready(function() {

$('#clickbox').load('eventpage/clicks.html.php #click2', function () {
    console.log('click2 loaded');
    $(this).hide()
    .fadeIn(3000);

    $('#click2').click(function(e) {
        e.preventDefault(); 
        console.log('click2 clicked');  
        $('#bizdev').load('pagewithscripttags.php', function (data) {
            console.log(data);
            console.log('#bizdev is loaded, but scripts are not run');
            $('#bizdev').hide();
            console.log('bizdev hidden');
        });                      
        $('#content').hide();
        $('#bizdev').show();
    });
});  

Когда я запускаю это (из внешнего js-файла), файл 'pagewithscripttags.php' загружается в DOM при событии click, но сценарии не выполняются, и я не могу понять, почему. ПОМОГИТЕ!

Однако, когда я перемещаю метод загрузки в функцию обратного вызова первой загрузки, файл вставляется в DOM и запускаются сценарии:

$(document).ready(function() {

$('#clickbox').load('eventpage/clicks.html.php #click2', function () {
    console.log('click2 loaded');
    $(this).hide()
    .fadeIn(3000);

    $('#bizdev').load('pagewithscripttags.php', function (data) {
            console.log(data);
            console.log('#bizdev loaded and scripts are run');
            $('#bizdev').hide();
            console.log('#bizdev hidden');
    }); 

    $('#click2').click(function(e) {
        e.preventDefault(); 
        console.log('click2 clicked');  
        $('#content').hide();
        $('#bizdev').show();
    });
});  

Почему сценарии выполняются как часть функции обратного вызова, а не как событие click (когда мне нужно, чтобы они запускались)?

Вот содержимое страницы pagewithscripts.php:

<script>console.log('this script was run');</script>
<script type="IN/MemberProfile" data-id="http://linkedin.com/publicprofileurl" data-format="inline" width='106px' data-related="false"></script> 

Первый скрипт запускается и появляется в console.log, но второй просто вставляется в DOM без запуска, за исключением случаев, когда я помещаю метод .load () вне обработчика щелчка.

(Мне нужно загрузить сценарии для события click, потому что для их запуска требуется несколько секунд (они вызывают API-интерфейс LinkedIn), и когда я запускаю их на готовом документе, происходит зависание / задержка).

Ответы [ 3 ]

0 голосов
/ 27 декабря 2011

На самом деле функция jQuery ' click () ' не будет обрабатывать событие 'click' динамических элементов, поэтому попробуйте on () или live () функции, чтобы ваш код работал нормально, с помощью этих функций вы можете переместить код обработчика щелчков из первого обратного вызова load ().

Помните: попробуйте заменитьваш $('#click2').click(function(e) { код с этим $('#click2').live("click", function(e) { кодом.

Примечание: функция 'live ()' устарела с версии jQuery 1.7.

Если вам не ясно, использовать эти функциизатем просто предоставьте ваш полный исходный код страницы, чтобы я мог проверить и настроить ваш код соответствующим образом.

0 голосов
/ 28 декабря 2011

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

IN.parse (DOMNode)

Это описано в справочном документе API JavaScript по событиям здесь: https://developer.linkedin.com/documents/inauth-inevent-and-inui

0 голосов
/ 27 декабря 2011

Загрузить тип данных скрипта http://api.jquery.com/jQuery.getScript/

...