2014-10-01 4 views
0

Я пишу простой скрипт тампермона, который будет получать дополнительную информацию для предметов в магазине. Я решил использовать .each() для загрузки документа, и он отлично работает.. Нагрузка в jQuery не запускается

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

$(document).on("load",".item",function(event) { 
    $(this).html($(this).html() + "OK"); 
}); 

прежде, чем это было :

$(".item").each(function(event) { 
    $(this).html($(this).html() + "OK"); 
}); 

, и все было в порядке.

Спасибо за помощь!

+0

Потому что при добавлении новых элементов, нагрузка не срабатывает .... – epascarello

+1

Можете ли вы показать HTML и сделать скрипку? И зачем использовать при загрузке с jquery? Просто поместите рабочий код внутри $ (function() {your code}); –

+1

Я предполагаю, что у вас есть функция для добавления элементов, я не знаю, чего вы пытаетесь достичь, но не можете ли вы использовать свой код для этой функции? – TheFrozenOne

ответ

0

Я считаю, что вам нужны наблюдатели мутации здесь, вы будете нуждаться в комбо коде ниже:

Это один для на нагрузке

$(document).ready(function(event) { 
    $(".item").each(function(event) { 
    $(this).html($(this).html() + "OK"); 
    }); 
}); 

и этот один будет ловить все изменения на йоте на «.item»

var target = $(".item"); 
// Create an observer instance 
var observer = new MutationObserver(function(mutations) { 
    mutations.forEach(function(mutation) { 
    var newNodes = mutation.addedNodes; // DOM NodeList 
if(newNodes !== null) { // If there are new nodes added 

    //alert('some thing has been changed'); 
     $(".item").each(function(event) { 
      $(this).html($(this).html() + "OK"); 
     }); 

     } 
    });  
}); 

// Configuration of the observer: 
var config = { 
attributes: true, 
childList: true, 
characterData: true 
}; 

// Pass in the target node, as well as the observer options 
observer.observe(target, config); 
// Later, you can stop observing 
//observer.disconnect(); 
0

с JQuery это так просто, как $(function(){ your code here }) создавать функции, которые будут выполняться после загрузки страницы. Это следует сделать это:

$(function(){ 
    $(".item").each(function(event) { 
    $(this).html($(this).html() + "OK"); 
    }); 
}); 

Вы могли бы также упростить JQuery НЕМНОГО следующим образом:

$(function(){ 
    $(".item").append('OK'); 
}); 

См http://jsfiddle.net/jh1bvux2/

+0

Это не будет выполнено для будущих элементов –

+0

Ах, извините, я не читал правильно. В этом случае я бы увидел, что функция, добавляющая новые элементы (вызов ajax или что-то в этом роде), должна справиться с этим. Он может запустить событие или напрямую вызвать функцию, выполняющую то, что вам нужно сделать. Единственное оставшееся решение - наблюдатель, как предложил санки. https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver?redirectlocale=en-US&redirectslug=DOM%2FMutationObserver#Browser_compatibility – Johnride

+0

Вы также можете использовать 'setInterval', но в этом случае он очень грязный , – Johnride