2013-07-11 15 views
0

У меня есть код, который позволяет вам выбрать вариант из selectbox.select box fill textarea

Каждый выбор должен напечатать различный текст в поданном TEXTAREA

Что я сделал не так? что я должен изменить?

<script src="jquery.js"></script> 
<form name="form1"> 
    <fieldset name="Group1"> 
     <legend>Group box</legend>Center Title: 
     <select name="ctrTitles" id="ctrTitles"> 
      <option value="1">Corp 1</option> 
      <option value="2">Shamrock Gold</option> 
      <option value="3">Hensin Way</option> 
     </select> 
     <br /> 
     <br /> 
     Address 1: 
     <textarea name="TextArea1" id="TextArea1" cols="20" rows="2"></textarea> 
     <br /> 
    </fieldset> 
</form> 
<script> 
    var centerLocations = new Array({ 
     text1: 'some text1' 
    }, { 
     text2: 'some text2' 
    }, { 
     text3: 'some text3' 
    }); 

    $('#ctrTitles').change(function() { 
     address = $(this).val() 
     val = $(":selected", this).index(); 
     $("#TextArea1").val(centerLocations["text" + address]); 

    }); 
</script> 
+0

Хорошо, сначала я ДОЛЖЕН сообщить вам, что ваши отступы и HTML-презентация ужасны, поверх
тегов. Кроме того, это '.onchange = function() {}', а не '.change (function() {})'. – Ariane

+3

'onchange' ??? .. '.change' отлично подходит –

+0

Эх, я никогда не видел .change. Я тебе верю. Сожалею. – Ariane

ответ

3

С тем, как вы обращаетесь значение, которое вы должны изменить, чтобы объект из массива, потому что вы пытаетесь получить доступ к массиву с именем свойства, которое не работает таким образом, вы можете использовать только индекс массива , но вы можете сделать это на объекте, делая centerLocations["text" + address]:

var centerLocations = { 
    text1: 'some text1', 
    text2: 'some text2', 
    text3: 'some text3' 
}; 

Fiddle

2 способами вы можете сделать это с массивом или объектом.

используя Array (только если индекс варианта совпадает с индексом элемента массива)

var centerLocations = [ 
    'some text1' //you can even get rid of text1, text2 etc.. 
, 'some text2' 
, 'some text3' 
]; 

$('#ctrTitles').change(function() { 
    $("#TextArea1").val(centerLocations[this.selectedIndex]); 

    //with your original structure you would do 
    //$("#TextArea1").val(centerLocations[this.selectedIndex]['text'+this.value]); 

}).change(); 

Demo

Используя объект

var centerLocations = { 
    text1: 'some text1', 
    text2: 'some text2', 
    text3: 'some text3' 
}; 

$('#ctrTitles').change(function() { 
    $("#TextArea1").val(centerLocations["text" + this.value]); 
}).change(); 

Demo

+0

спасибо, кстати, есть ли лучший способ получить правильный код для чего мне нужно? – Roi

+0

@Roi Ну, если вы хотите упростить, так как «text1» и т. Д. Не имеет значения, вы можете использовать простой массив. 'centerLocations [0] =" some text1 "' например. Но это не сильно изменилось. – Ariane

+0

@Roi да, вы можете немного его оптимизировать, и вы можете сделать это двумя способами, используя массив и используя объект. – PSL