Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [js]Tworzenie nowej listy z listy
skowron-line
post
Post #1





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Revan
post
Post #2





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 21.03.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Chodzi o zwykłe skopiowanie elementu? Z użyciem jQuery może to wyglądać zupełnie tak:
Kod
$('#abc').clone(true).appendTo('#oDiv');
Go to the top of the page
+Quote Post
skowron-line
post
Post #3





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
BaN
post
Post #4





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

Ostrzeżenie: (0%)
-----


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);
   }
Go to the top of the page
+Quote Post
skowron-line
post
Post #5





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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

Ten post edytował skowron-line 22.11.2007, 17:01:33
Go to the top of the page
+Quote Post
BaN
post
Post #6





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

Ostrzeżenie: (0%)
-----


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);
   }
}
Go to the top of the page
+Quote Post
skowron-line
post
Post #7





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


nie no zle zrozumiales chce 1 select z 5 opcjami
Go to the top of the page
+Quote Post
BaN
post
Post #8





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

Ostrzeżenie: (0%)
-----


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>
Go to the top of the page
+Quote Post
skowron-line
post
Post #9





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


@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);
      }
Go to the top of the page
+Quote Post
BaN
post
Post #10





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
skowron-line
post
Post #11





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


jak na moje oko oba te skrypty sa takie podobne, ten sam sens ale inaczej napisane wiec nie rozumiem dlaczego nie dziala

Ten post edytował skowron-line 23.11.2007, 14:30:17
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Od kiedy ten sam sens idzie w parze z tą samą poprawnością kodu?
Go to the top of the page
+Quote Post
skowron-line
post
Post #13





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


@BaN dzieki wielkie za kodzik, teraz dziala jak nalezy
@nospor oczywiscie konstruktywna krytyka
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 19:18