Плагин Chosen для jQuery (находится здесь: http://harvesthq.github.com/chosen/) добавляет дополнительную функциональность для выбора элементов HTML. Я могу добавить функциональность к исходным элементам, загруженным на страницу, с помощью следующего кода:
$(document).ready(function(){
$(".chosenProperties").data("placeholder","Select properties...").chosen();
$(".chosenType").data("placeholder","Type...").chosen();
$(".chosenInstance").data("placeholder","Instance...").chosen()
Это работает. Все три из этих классов элементов select появляются в div с именем #newGroup. На странице есть кнопка, которая «добавляет» новую группу, которая клонирует div #newGroup и добавляет его прямо под первым.
Он содержит те же элементы. Однако, когда я пытаюсь добавить функциональность Chosen к выбранным элементам в клонированном div, они зависают. Интерфейс выглядит так же, как и первый, поэтому Chosen загружается, но когда я нажимаю на них, ничего не происходит. Вот код:
$( '#swl-add-group-button' ).click( function() {
//addGroupToGUI();
createClassAddRow();
} );
var rowNum = 0;
function createClassAddRow() {
rowNum++;
newRow = jQuery('#newGroup').clone().css('display', '');
newHTML = newRow.html().replace(/0/g, 1);
newRow.initializeJSElements();
newRow.html(newHTML);
newRow.initializeJSElements();
jQuery('#mainTable').append(newRow);
addGroup(newRow);
}
jQuery.fn.initializeJSElements = function (){
this.find(".chosenProperties").each( function() {
alert('test');
if($(".chosenProperties").data("placeholder", "Select properties...").chosen()){
alert('test2');
}
});
this.find(".chosenType").each( function() {
jQuery(this).data("placeholder","Type...").chosen();
});
this.find(".chosenInstance").each( function(){
jQuery(this).data("placeholder", "Instance...").chosen();
})
}
Появляются оба предупреждения, test и test2. Итак, я думаю, что jQuery загружается, но по какой-то причине не работает. Кроме того, я не уверен, имеет ли это значение, но когда я наводил курсор на выбранные элементы клонированного div, он говорит javascript: void (1), тогда как при наведении курсора на оригинал он говорит javascript: void (0).