Я видел код, на который вы ссылаетесь. Мне не понравилась идея создания двух полей для чего-то подобного. Я придумал следующий код, который работает довольно хорошо. Мы загружаем эту маленькую вспомогательную функцию через общий js-файл на всех наших страницах crm 4.0, используя следующий код
Следующий код не имеет прямого отношения. Посмотрите дальше на вспомогательную функцию и пример использования строк.
// Get Generic Scripts from server
try{
var headID = document.getElementsByTagName("head")[0];
var GenericHelpers = document.createElement('script');
GenericHelpers.type = 'text/javascript';
GenericHelpers.src = '/ISV/GenericScripts/Generics.js';
GenericHelpers.onload = scriptLoaded;
GenericHelpers.onreadystatechange = function(){if (GenericHelpers.readyState == 'loaded' || GenericHelpers.readyState == 'complete'){scriptLoaded();}};
headID.appendChild(GenericHelpers);
}
catch(err){
alert('Failed to attach specific scripts to this form. Please contact IT Support.\n\n Specific Error: ' + err.description);
}
function scriptLoaded(){
try{
//all other code...
}
catch(err){
alert('Form load events failed. Functionality of the form may limited or non-functional. Please contact IT Support.\n\n Specific Error: ' + err.description);
}
}//scriptLoaded()
Код совсем другой по своему подходу. В основном у нас есть текстовое поле и в коде мы реализуем различные опции. В итоге мы отказались от использования этого подхода все вместе не потому, что он не работал, а из-за сложности других вещей, которые мы хотели показать. Вместо этого мы создали html-страницу, встроенную в iframe, и страница в основном перенесла информацию обратно в текстовые поля. Общая конечная цель состояла в том, чтобы организация управляла службой планировщика.
Поскольку код остался в нашем файле generics.js, я предполагаю, что он работает, но не могу сказать, что проверил его и не трогал его с момента его написания. Рад вернуться к этому, хотя просто напишите мне.
Вспомогательная функция
function mvHelper(oElement){
var divTag = document.createElement("<div id='list_" + oElement.id + "' style='overflow-y:auto; border:1px #6699cc solid; background-color:transparent;' />");
this.mvField = oElement;
this.mvField.style.display = "none";
this.mvField.parentNode.appendChild(divTag);
this.addTickBox = function(str){
var addInput = null;
if(oElement.value.indexOf(str)>=0){
addInput = document.createElement("<input checked='true' type='checkbox' title='" + str + "' style='border:none; width:25px; align:left;' />");
}
else{
addInput = document.createElement("<input type='checkbox' title='" + str + "' style='border:none; width:25px; align:left;' />");
}
var addLabel = document.createElement("<label style='width:65px; align:left;' />");
addLabel.innerText = str;
addInput.onclick = function(){
if(this.checked){
oElement.value += str + ',';
}
else{
oElement.value = oElement.value.replace(str + ',','');
}
}
divTag.appendChild(addInput);
divTag.appendChild(addLabel);
}//mvHelper(oElement)
Пример использования
// crmForm.all.new_daysofweek is a text field in crm itself.
var daysOfWeek = new mvHelper(crmForm.all.new_daysofweek);
dayOfWeek.addTickBox("Mon");
dayOfWeek.addTickBox("Tue");
dayOfWeek.addTickBox("Wed");
dayOfWeek.addTickBox("Thu");
dayOfWeek.addTickBox("Fri");
dayOfWeek.addTickBox("Sat");
dayOfWeek.addTickBox("Sun");