Подтвердить что ты не робот

Jquery html callback

Есть ли обратная связь для функции html() или способ проверить, что она завершена. Например:

$("#some_div").html('something here');

if($("#some_div").html() == ''){
//do something here
}

Я устанавливаю html элемента из сообщения. Иногда он не загружается, поэтому, когда он не загружается, я хотел бы, чтобы он что-то сделал, возможно ли это. То, как я это делаю сейчас, всегда делает другое, потому что он не установил html к тому времени, когда он проверит, что у него есть html.

4b9b3361

Ответ 1

html() - синхронная операция. Фактическое обновление DOM зависит от вашего содержимого html. Если у вас есть теги <img> или <iframe>, для загрузки потребуется время. Следующий оператор, следующий за html(), должен сразу увидеть новое содержимое html.

Вы имели в виду load() вместо этого?

[Изменить] Основываясь на вашем комментарии, вероятно, ваш отказ $.ajax. Не html(). Попробуйте подключить обработчик отказа к ajax-вызову и повторить попытку оттуда? Хотя, если ваш код на стороне сервера бесшумно выходит из строя с кодом 200, событие сбоя не вызывается. В этом случае вы можете проверить значение html, прежде чем устанавливать его в элемент.

Ответ 2

Ответ Chetan Sastry (самый высокий ответ сейчас) не на 100% правильный.

$('#some_div').html('<div id="new_div">some content</div>'); // code 1    
$('#new_div').click(function(){ }); //code 2

Я не знаю почему, но в некоторых случаях код 2 будет выполнен до завершения кода 1.. Между кодом 1 и кодом 2 есть короткое время меньше 0 миллисекунд. Оно должно быть некоторыми специальными исполняемыми ордерами в Javascript.

Для решения проблемы вам нужно использовать cballou way (floor answer = _ =!). например.

var sync = function(fn, millisec){
    var m = millisec ? millisec : 0; //in face, 0 is enough
    return setTimeout(fn,m);
};

$('#some_div').html('<div id="new_div">some content</div>'); // code 1    
var code2 = function(){
    $('#new_div').click(function(){ }); // run code 2, here
};

sync(code2);

Ответ 3

Единственный способ, который я нашел с живым и обратным вызовом,

$('p').live('click', function() {
    // delay dont work with html() // fcallback function
    $(this).parent('div').slideUp('slow', function() {
      // empty block
      $(this).html('');
       if($(this).html()==''){
         // function
         myFunction();
       }
    });
});

Ответ 4

Надеюсь, у кого-то есть лучшее решение, чем я. Быстрое обходное решение - использовать setTimeout(), чтобы задержать следующие вызовы, давая вашему блоку HTML достаточно времени для загрузки (так как время загрузки настолько миниатюрное).

$('#some_div').html('<div>some content</div>');
// set timeout for 250 milliseconds
setTimeout(callbackFunction, 250);

function callbackFunction() {
    // do some cool sh*t
}

Обратите внимание, что если вы хотите передать любые переменные в свою функцию, вы можете сделать следующее:

$('#some_div').html('<div>some content</div>');
// set timeout for 250 milliseconds
var myParam = 'value';
setTimeout(function() { callbackFunction(myParam); }, 250);

function callbackFunction(myParam) {
    // do some cool sh*t
    alert(myParam);
}