2013-09-05 2 views
1

Код, который я написал, работает, но это может быть лучше. Я пишу одну и ту же функцию три раза, по одной для каждого из элементов со списком. Я зациклился на том, как сделать это более эффективным. Я посмотрел на создание объекта и поместил каждую из переменных в массив, но я не смог успешно его запустить.динамическое создание элементов выбора и заполнение опций из списка sharepoint

var csCategory = <%=csCategoryArray%>, 
     csKeyword = <%=csKeywordArray%>, 
     csEntity = <%=csEntityArray%>; 

addOption = function (selectbox, text, value) { 
    var optn = document.createElement("OPTION"); 
    optn.text = text; 
    optn.value = value; 
    selectbox.options.add(optn); 
} 

$(function() { 
    // Temp test stuff to populate option list 
    var selectObj = document.getElementById("combobox1") 
    if (selectObj) { 
     for (var i=0; i < csCategory.length;++i){  
      addOption(selectObj, csCategory[i], csCategory[i]); 
     } 
    } 
}); 

$(function() { 
    // Temp test stuff to populate option list 
    var selectObj = document.getElementById("combobox2") 
    if (selectObj) { 
     for (var i=0; i < csKeyword.length;++i){  
      addOption(selectObj, csKeyword[i], csKeyword[i]); 
     } 
    } 
}); 

$(function() { 
    // Temp test stuff to populate option list 
    var selectObj = document.getElementById("combobox3") 
    if (selectObj) { 
     for (var i=0; i < csEntity.length;++i){  
      addOption(selectObj, csEntity[i], csEntity[i]); 
     } 
    } 
}); 

ответ

0

Очевидным первым шагом является реорганизация общего кода. Итак:

$(function() { 
    // Temp test stuff to populate option list 
    var selectObj = document.getElementById("combobox2") 
    if (selectObj) { 
    for (var i=0; i < csKeyword.length;++i){  
     addOption(selectObj, csKeyword[i], csKeyword[i]); 
    } 
    } 
}); 

(... etc ...) 

становится:

function populate(id, collection) { 
    var selectObj = document.getElementById(id) 
    if (selectObj) { 
    for (var i=0; i < collection.length;++i){  
     addOption(selectObj, collection[i], collection[i]); 
    } 
    } 
} 

$(function() { 
    populate ("combobox1", csCategory); 
    populate ("combobox2", csKeyword); 
    populate ("combobox3", csEntity); 
}); 

Я не вижу существенного преимущества на данном этапе сдачи combobox1 и его братьев и сестер в массив, но может быть стоит пересматривают этот код, если в будущем добавляются больше combobox.

+0

Рефакторинг сделал трюк. Благодаря! – user1725382

+0

Я думал, что getElementById() не работает в SharePoint, потому что, как он префикс контейнеров на идентификатор содержащихся элементов? –