2013-12-02 2 views
-1

Я хотел бы динамически построить страницу из 2 хэшей (в моем примере c и d).JQuery click eventhandler: регистрировать событие на динамически добавленном элементе

var c = { 
    cluster_1 : { list_datasets: [ "a", "b", "c"]}, 
    cluster_2 : { list_datasets: [ "b", "c"]}, 
}; 
var d = { 
    a : { title: "A", content: "aaaaaaaaaaaaaa"}, 
    b : { title: "B", content: "bbbbbbbbbbbbbb"}, 
    c : { title: "C", content: "cccccccccccccc"}, 
}; 

так, что я сначала получить список кластеров, а затем, нажав на кластере, я получаю список их соответствующего содержания. Это прекрасно работает до сих пор.

Но теперь, если я хочу пойти дальше, щелкнув по каждому набору данных, я хотел бы иметь описание набора данных. Операция выбора jquery $ ('# a') пуста и ничего не отображается. Here a little standalone example that shows the problem

Большое спасибо за помощь или любую информацию по этой теме.

Сердечные приветы

Antoine

+0

К сожалению, данный пример не был завершен. Вот правильный пример: http://jsfiddle.net/HTUzh/3/ – user2380696

+0

'JQuery click eventhandler: зарегистрировать событие на динамически добавленном элементе'-> jQuery' .delegate() '(или' .on() ', но запутывает imo) – Virus721

ответ

0

Поскольку эти элементы создаются динамически, вы должны использовать delegate обработчик события как

$(document).on('click', '#'+key, function(event){ 
     $("aside").html(value.content); 
     }); 

JSFiddle

+0

Большое спасибо, Обработчик события делегата решил проблему. Здесь небольшой фрагмент кода с этим правильным способом добавить addhandler на динамически создаваемые элементы: http://jsfiddle.net/HTUzh/7/ С уважением Antoine – user2380696

0

Ваша проблема заключается в том, что вы называете секунд каждый

$ .each (d, функция (ключ, значение) {..

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

function getValues(){  
$.each(d, function(key, value){ 
    $('#' + key).each(function(){ 

    console.log(value.content); 

    }); 

}); 
}; 

и назвать его в конце клик функции

$('#' + cluster).click(function(event) { 

    var content_list = "<ul>"; 

    for (var i = 0; i < value.list_datasets.length; i++) { 

     var dsName = datasetName = value.list_datasets[i]; 

     if(d.hasOwnProperty(datasetName)) { 
     var datasetName = d[datasetName].title; 

     } 

     content_list = content_list + "<li><a id='" + dsName + "' href='#foo'>" + datasetName + "</a></li>"; 
    } 

    content_list = content_list + "</ul>"; 

    $("section").html(content_list); 
    getValues(); 
    }); 
Смежные вопросы