2016-03-31 2 views
2

я следующий код, который использует JQuery динамически обновлять страницу, как только его загрузки из URL

$(document).ready(function() { 
     var htmlattri="background-color:red;"; 
     $("body").attr("style", htmlattri); 
     $("#navbar").append('<div id="test" style="position: absolute; left: 0px; top: 0px; z-index: 3000; height: 20px"><input type="button" value="Back" onclick="window.history.go(-1)" /></div>') 
    }); 

У меня есть проблема в том, что в #navbar элемент построен через ajax (не JQuery), который происходит после того, как $(document).ready уволен.

Есть ли способ заставить это срабатывать, когда страница полностью построена?

У меня нет контроля над исходными текстами страниц.

ответ

0

Введите код, который вы пытаетесь выполнить в обратном вызове ajax success, после того как вы создали #navbar. Вы не можете «переместить» вызов $(document).ready(), он всегда будет выполняться, когда dom был создан

+0

У меня нет контроля над исходным кодом, поскольку я вставляю jquery на страницу после ее загрузки. – user1513388

+0

@ user1513388 Как вы вводите js на эту страницу? – itzmukeshy7

+0

Вам придется привязать обработчик onchange или что-то к элементу 'navbar', возможно только для первого изменения и опустить дальнейшие изменения. –

0

Как насчет $ .Event?

$('body').on('wearedone', function(){ 
    console.log('hello!'); 
}); 

$(document).ready(function() { 
    var htmlattri="background-color:red;"; 
    $("body").attr("style", htmlattri); 
    $("#navbar").append('<div id="test" style="position: absolute; left: 0px; top: 0px; z-index: 3000; height: 20px"><input type="button" value="Back" onclick="window.history.go(-1)" /></div>'); 

    // this is where we "reimplement" $(document).ready 
    $('body').trigger($.Event('wearedone')); 
}); 
+0

Я думаю, что если '$ ('body'). Trigger ($. Event ('wearedone'));' выполняется сразу после '$ (" # navbar "). Append ('...');' fire, он не будет ждать выполнения рендеринга DOM. –

+0

Правда. Но, поскольку js не является * async *, он будет ждать, пока dom отобразит. нет? –

+0

Итак, если вы используете AJAX для создания навигационной панели, просто добавьте событие 'event' в' success: function (r) {(...) event} ' –