Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js]Tworzenie nowej listy z listy
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
skowron-line
Witam chcialbym utworzyc nowy obiekt typu <select> w oparciu o juz istniejacy, niby dosyc proste ale jednak.
kod
  1. <head>
  2. <script type="text/javascript">
  3. function showOptions(){
  4. var oList = document.getElementById('abc');
  5. var oDiv = document.getElementById('oDiv');
  6. var select = document.createElement('select');
  7. for(var i=0; i<=oList.length; i++){
  8. // alert(oList.options[i].value);
  9. // oListValue = oList.options[i].value;
  10. //oListText = oList.options[i].text;
  11. option = document.createElement('option');
  12. option.setAttribute('value',oList.options[i].value);
  13. var optionText = document.createTextNode(oList.options[i].text);
  14. option.appendChild(optionText);
  15. select.appendChild(option);
  16. }
  17. oDiv.appendChild(select);
  18. }
  19. </script>
  20. </head>
  21. <body onLoad="showOptions();">
  22. <select id="abc">
  23. <option value="a">ab</option>
  24. <option value="b">bc</option>
  25. <option value="c">cd</option>
  26. </select>
  27. <div id="oDiv"></div>
  28. </body>
  29. </html>

problem wyglada nastepujaco.
Kod
Error: oList.options[i] has no properties
Source File: file:///C:/AppServ/www/javascript/selectOptions.html
Line: 13

ale jak odkomentuje alerta to elegancko wywali on wszystkie wartosci tej listy
Revan
Chodzi o zwykłe skopiowanie elementu? Z użyciem jQuery może to wyglądać zupełnie tak:
Kod
$('#abc').clone(true).appendTo('#oDiv');
skowron-line
Cytat(Revan @ 22.11.2007, 15:42:08 ) *
Chodzi o zwykłe skopiowanie elementu? Z użyciem jQuery może to wyglądać zupełnie tak:
Kod
$('#abc').clone(true).appendTo('#oDiv');

Cytat
Z użyciem jQuery
ale ja nie wspominalem ze chce to zrobic przy uzyciu jQuery
BaN
Powinno działać:
Kod
function showOptions(){
     var select = document.createElement('select');
     var oList = document.getElementById('abc');
     var oDiv = document.getElementById('oDiv');
     for(var i=0,n=oList.length; i<n; i++){
       option = document.createElement('option');
       option.setAttribute('value',oList.options[i].value);
       option.appendChild(document.createTextNode(oList.options[i].text));
       select.appendChild(option);
     }
     oDiv.appendChild(select);
   }
skowron-line
Mam cos takiego
Kod
  for(var i=0;i<=oList2.length-1;i++){
        var oOption2 = document.createElement('option');
        oOption2.setAttribute('value',oList2Value[i]);
        oOption2 = document.createTextNode(oList2Text[i]);
        oSelect2.appendChild(oOption2);
      }

bo wczesniej wrzucilem do tablicy

z tym ze jest jeden problem
wszystko wrzuca mi do jednej opcji
i mam jedna do wyboru z 5 nazwami
BaN
O ile dobrze zrozumiałem, to chcesz utworzyć 5 selektów, więc wystaczy zrobić to w pętli. Dodałem dodatkowo 'name', gdyż chyba później te dane z formularza mają być wykorzystane.
Kod
function showOptions(){
   var i,j,select,oList = document.getElementById('abc'),n=oList.length
   var oDiv = document.getElementById('oDiv');
   for(j=1; j<=5; ++j) {
     select = document.createElement('select');
     select.setAttribute('name', 'nazwa' + j);
     for(i=0; i<n; i++){
       option = document.createElement('option');
       option.setAttribute('value',oList.options[i].value);
       option.appendChild(document.createTextNode(oList.options[i].text));
       select.appendChild(option);
     }
     oDiv.appendChild(select);
   }
}
skowron-line
nie no zle zrozumiales chce 1 select z 5 opcjami
BaN
Możesz wykorzystać funkcję, którą podałem wyżej lub krótszą wersję:
  1. <script type="text/javascript">
  2. function createOptions(){
  3. var i,opcje=[[1,'opcja 1'],[2,'opcja 2'],[3,'opcja 3'],[4,'opcja 4'],[5,'opcja 5']],n=opcje.length
  4. var o=document.getElementById('abc').options
  5. for(i=0;i<n;++i){
  6. o[o.length]=new Option(opcje[i][1],opcje[i][0],false,false)
  7. }
  8. }
  9. </head>
  10. <body onLoad="createOptions()">
  11. <select id="abc">
  12. </body></html>
skowron-line
@BaN no to teraz mi dajes skrypt.
ja mam cos takiego

pobieram wartosci z juz istniejacej listy
Kod
var oList2 = document.getElementById('id_stawka_vat1');
   var oList2Value = new Array();
   var oList2Text = new Array();
   for(var i=0; i<=oList2.length-1;i++){
    oList2Value[i] = oList2.options[i].value;
    oList2Text[i] = oList2.options[i].text;
    //alert(oList1.options[i].value);  
   }


a potem wkladam do nowo utowrzonego
Kod
  oSelect2 = document.createElement('select');
         oSelect2.setAttribute('name','id_stawka_vat'+numRows);
         oSelect2.setAttribute('onchange','Netto('+numRows+')');
         oSelect2.setAttribute('onchange','Netto('+numRows+')');
       for(var i=0;i<=oList2.length-1;i++){
        var oOption2 = document.createElement('option');
        oOption2.setAttribute('value',oList2Value[i]);
        oOption2 = document.createTextNode(oList2Text[i]);
        oSelect2.appendChild(oOption2);
      }
BaN
Nie rozumiem w takim razie co chcesz zrobić. Kod który podałem w poście #4 tworzy selekta z opcjami na podstawie już istniejącego selekta, czyli tak jak chciałeś mieć. Jeżeli pierwszy ma trzy opcje, to drugi też będzie miał trzy. Jeżeli chcesz dopisać dodatkowe opcje do drugiego selekta, to wykorzystaj te same polecenia, ale z innymi parametrami.
skowron-line
jak na moje oko oba te skrypty sa takie podobne, ten sam sens ale inaczej napisane wiec nie rozumiem dlaczego nie dziala
nospor
Kod
var oOption2 = document.createElement('option');
        oOption2.setAttribute('value',oList2Value[i]);
        oOption2 = document.createTextNode(oList2Text[i]);
        oSelect2.appendChild(oOption2);

I przyjrzyj sie linijce 3 i temu co tam robisz

ps:
Cytat
ten sam sens ale inaczej napisane wiec nie rozumiem dlaczego nie dziala
A to ciekawe stwierdzenie smile.gif
Od kiedy ten sam sens idzie w parze z tą samą poprawnością kodu?
skowron-line
@BaN dzieki wielkie za kodzik, teraz dziala jak nalezy
@nospor oczywiscie konstruktywna krytyka
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.