загрузка текста в текстовую область на основе выпадающего списка - PullRequest
1 голос
/ 02 сентября 2011

Для начала я искал сайт и нашел это:

Как заполнить текстовое поле с помощью выпадающего списка

, но оно не подошло моемупотребности, так как я создаю очень длинные шаблоны, и вышеупомянутый метод будет слишком трудоемким и непрактичным, поскольку это будет означать заполнение атрибута value каждого тега <option> моими шаблонами.

Итак, воткод:

<script type="text/javascript">
//<![CDATA[ 
function showCSTemplates(sel){   

locations =[ "", /*this remains blank for first selection in drop-down list*/ 

/*option 1*/                 
" This is template 1 that  will appear in a
textarea keeping 
its formatting 
as  
is. ",

/*option 2*/                
" This is template 2 that 
 will appear in a
 textarea keeping its 
 formatting as  is.

Credentials:  
Contact Info: ",

/*option 3*/                 
" This is template 3 that  will appear in a
textarea keeping its formatting as  is.

Donec tortor lorem,  
ornare vitae commodo nec,  
sagittis et nunc. 
Maecenas sagittis quam ",

/*option 4*/                 
"etc",

/*option 5*/                 
"etc...", ];
                        srcLocation = locations    [sel.selectedIndex];         
                        if (srcLocation != undefined && srcLocation != "") {      
                  document.getElementById('CSTemplates').innerHTML = srcLocation;   
 } 
}  //]]>
</script>

и вот разметка:

<h1>Note Generator</h1>

<div class="left">
CSTemplates
<p>
<select class="c10"> 
<option selected="selected" value="" id="Templates" onchange="showCSTemplates(this);">Please select a template...</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</p>
<p>
<textarea cols="30" rows="20" readonly="readonly" id="CSTemplates">
Templates will auto-populate 
here depending on the 
selection made from the 

[CSTemplates] 

drop-down list.
</textarea>
</p>
</div><!--left ends here-->

Хуже всего то, что я даже не получаю сообщение об ошибке скрипта, когда тестирую это, просто нетработать вообще, поэтому я не знаю, где я ошибся здесь.Я сделал похожую страницу, используя теги <input type="text">, и они работали нормально, но я не могу заставить ее работать с <textarea>, независимо от того, что я пытаюсь.

Любая помощь будетБуду очень признателен!Заранее спасибо!

Отредактировано 2 сентября 2011 г. в 01:17:34

Чтобы пояснить вышесказанное, где я сказал «Ядаже не получая ошибку скрипта при тестировании, он просто не работает вообще, "

, что я имел в виду, если я оставляю шаблоны все в одной строке, то есть

/*option 1*/                 
" This is template 1 that  will appear in a textarea keeping its formatting as is. ",

тогда я не получаю ошибку.Однако, если я ввожу разрывы строк для форматирования, как указано выше:

/*option 1*/                 
" This is template 1 that  will appear in a
textarea keeping 
its formatting 
as  
is. ",

, тогда я получаю ошибку «Неопределенная строковая константа».Будет ли использование \n решить эту ошибку?Кроме того, я исключил это из сценария, потому что я не знаю, как это сделать, но в <textarea>, где написано

Templates will auto-populate 
here depending on the 
selection made from the 

[CSTemplates] 

drop-down list.

, мне нужно стереть, когда пользователь выбирает выбор извыпадающий список, и для <textarea> для заполнения с соответствующим выбором из сценария.Спасибо!

Ответы [ 3 ]

3 голосов
/ 02 сентября 2011

Хорошо, у вас было много проблем в коде, главная из которых заключалась в том, что вместо опций было выбрано onchange в опции, там также была небольшая проблема, которую я решил, и вот рабочий пример http://jsfiddle.net/gKsdK/1/

Вот разметка

<h1>Note Generator</h1>

<div class="left">
CSTemplates
<p>
<select class="c10" onchange="showCSTemplates(this);"> 
<option selected="selected" value="" id="Templates">Please select a template...</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</p>
<p>
<textarea cols="30" rows="20" readonly="readonly" id="CSTemplates">
Templates will auto-populate 
here depending on the 
selection made from the 

[CSTemplates] 

drop-down list.
</textarea>
</p>
</div><!--left ends here-->

Вот JS

function showCSTemplates(sel){   

locations =[ "", /*this remains blank for first selection in drop-down list*/ 

/*option 1*/                 
" This is template 1 that  will appear in a textarea keeping its formatting as  is. ",

/*option 2*/                
" This is template 2 that  will appear in a textarea keeping its  formatting as  is. Credentials:  Contact Info: ",

/*option 3*/                 
" This is template 3 that  will appear in a textarea keeping its formatting as  is. Donec tortor lorem,  ornare vitae commodo nec,  sagittis et nunc. Maecenas sagittis quam ",

/*option 4*/                 
"etc",

/*option 5*/                 
"etc...", ];
                   srcLocation = locations    [sel.selectedIndex];        
   if (srcLocation != undefined && srcLocation != "") {      
                  document.getElementById('CSTemplates').innerHTML= srcLocation;   
 } 
}
2 голосов
/ 02 сентября 2011

Вы связали событие onchange с option вместо select.

1 голос
/ 02 сентября 2011

Если вы хотите, чтобы строка была в нескольких строках, вы должны объединить ее:

/*option 1*/                 
" This is template 1 that  will appear in a \n"+
"textarea keeping \n"+
"its formatting \n"+
"as \n"+  
"is. \n",

\ n здесь только для того, чтобы создать разрывы в вашем.

А если вы хотите изменить содержимое текстовой области, используйте свойство .value , а не .innerHTML !

...