Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z onchange w input file w ie
marrrecki
post
Post #1





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 19.07.2006
Skąd: Lublin

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


Witam. MAm problem. zrobiłem sobie funkcję, która po wybraniu jednego pliku poprzez input file tworzy mi w divie kolejny input. wszystko działa pod operą i ff, ale pod ie niestety nie chce.
Oto ta funkcja:
  1. function DodajElement()
  2. {
  3. var element = document.createElement('input');
  4. element.setAttribute('type', 'file');
  5. element.setAttribute('onchange', 'javascript:DodajElement();');
  6.  
  7. var liczba = 0;
  8. var ilosc = document.forms['newsy_edit'].elements.length;
  9. for (var i = 0; i < ilosc; i++ )
  10. {
  11. if (document.forms['newsy_edit'].elements[i].type == 'file')
  12. {
  13. liczba += 1;
  14. }
  15. }
  16.  
  17. element.setAttribute('name', 'file-'+(liczba+1));
  18.  
  19. element.style.display = "block";
  20. element.style.margin= "2px";
  21.  
  22. var div = document.getElementById('dodatkowe');
  23. div.appendChild(element);
  24.  
  25. //alert(element.onchange);
  26.  
  27. document.forms["newsy_edit"].dodatkowe_ilosc.value = liczba;
  28. }


Czy ktoś może mi powiedzieć o co biega?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
gekon
post
Post #2





Grupa: Zarejestrowani
Postów: 614
Pomógł: 7
Dołączył: 10.11.2003
Skąd: Rzeszów/Kraków

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


Pokaż cały kod.

Edyta.
Nie napisałeś co Ci nie działa. Podejrzewam, że onchange. Zrób to osobnym zdarzeniem.

Ten post edytował gekon 17.01.2008, 18:33:49
Go to the top of the page
+Quote Post
marrrecki
post
Post #3





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 19.07.2006
Skąd: Lublin

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


to jest cała funkcja. Dokładnie pod ie nie reaguje na onchange, ale pod ff i operą jest wszystko cacy. Fukcja DodajElement() wywoływana jest przy body onload() i za każdym razem jak jak wybierzemy jakiś plik przez input file.

W jaki sposób mam to wywołać osobnym zdarzeniem? Tu jest tylko jedno zdarzenie i nie mam jak inaczej się do tego zabrać.
Go to the top of the page
+Quote Post
gekon
post
Post #4





Grupa: Zarejestrowani
Postów: 614
Pomógł: 7
Dołączył: 10.11.2003
Skąd: Rzeszów/Kraków

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


Bez używania żadnej zewnętrznej biblioteki to możesz pobrać wszystkie inputy z diva #dodatkowe i w pętli zrobić przechwytywanie zdarzenia.

  1. var file-inputs = document.getElementById("dodatkowe").getElementsByTagName("input");
  2.  
  3. for(var i =0; i < file-inputs.length; i++){
  4. file-inputs[i].onchange = function(){
  5. // tu piszesz co ma sie dziac...
  6. }
  7. }


PS. Usuń jeden wpis, bo się zdublowały.

Ten post edytował gekon 18.01.2008, 11:14:17
Go to the top of the page
+Quote Post
marrrecki
post
Post #5





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 19.07.2006
Skąd: Lublin

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


niestety to co podałeś nie chce działać. Może jakieś inne pomysły?
Go to the top of the page
+Quote Post
gekon
post
Post #6





Grupa: Zarejestrowani
Postów: 614
Pomógł: 7
Dołączył: 10.11.2003
Skąd: Rzeszów/Kraków

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


A pokaż jak to zrobiłeś u siebie.
Go to the top of the page
+Quote Post
marrrecki
post
Post #7





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 19.07.2006
Skąd: Lublin

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


  1. var filez = document.getElementById("dodatkowe").getElementsByTagName("input");
  2.  
  3. for(var i =0; i < filez.length; i++){
  4. filez[i].onchange = function(){
  5. DodajElement();
  6. }
  7. }

Wstawiałem to zarówno w sekcję head jak i w body. Próbowałem również tak:
  1. var filez = document.getElementById("dodatkowe").getElementsByTagType("file");
  2.  
  3. for(var i =0; i < filez.length; i++){
  4. filez[i].onchange = function(){
  5. DodajElement();
  6. }
  7. }

oraz
  1. var filez = document.getElementById("dodatkowe").getElementsByTagName("input");
  2.  
  3. for(var i =0; i < filez.length; i++){
  4. filez[i].onchange =DodajElement();
  5. }


Ten post edytował marrrecki 20.01.2008, 15:22:13
Go to the top of the page
+Quote Post
gekon
post
Post #8





Grupa: Zarejestrowani
Postów: 614
Pomógł: 7
Dołączył: 10.11.2003
Skąd: Rzeszów/Kraków

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


To co podałem to JavaScript, nie PHP.
Go to the top of the page
+Quote Post
marrrecki
post
Post #9





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 19.07.2006
Skąd: Lublin

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


wiem. nie ten taqg w forum zaznaczylem i forum samo dodalo tagi php.
Go to the top of the page
+Quote Post
John
post
Post #10





Grupa: Zarejestrowani
Postów: 107
Pomógł: 11
Dołączył: 1.08.2007
Skąd: Poland,Warsaw

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


dla ie musi być onChange nie onchange :-) i tak samo dla wszystkich ( onClick etc. )
Go to the top of the page
+Quote Post
gekon
post
Post #11





Grupa: Zarejestrowani
Postów: 614
Pomógł: 7
Dołączył: 10.11.2003
Skąd: Rzeszów/Kraków

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


@marrrecki: Pokaż cały kod.
Go to the top of the page
+Quote Post
marrrecki
post
Post #12





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 19.07.2006
Skąd: Lublin

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


Korzystam z szablonów smarty, ale te nie mają żadnego wpływu na działanie skryptów. Zastosowałem się do porady @Johna, ale to tez nic nie dało.

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <title>{$lang_TITLE}</title>
  3. <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8">
  4. <meta name="author" content="jetshop">
  5. <meta name="Keywords" content="{$lang_META_KEYWORDS}">
  6. <meta name="description" content="{$lang_META_DESCRIPTION}">
  7. <meta name="robots" content="noodp">
  8. <link rel="shortcut icon" href="templates/{$current_template}/images/favicon.ico">
  9. <link rel="stylesheet" type="text/css" href="templates/{$current_template}/styles/stylesheet.css">
  10. <script language="JavaScript" src="js/overlib_mini.js"></script>
  11. <script language="JavaScript" src="js/kalendarz.js"></script>
  12. {literal}
  13. <script language="javascript" type="text/javascript" src="tinymce/jscripts/tiny_mce/tiny_mce.js"></script>
  14. <script language="javascript" type="text/javascript">
  15. tinyMCE.init({
  16. mode : "textareas",
  17. elements : "ajaxfilemanager",
  18. theme : "advanced",
  19. plugins : "table,advhr,advimage,advlink,flash,paste,fullscreen,noneditable,contextmenu",
  20. theme_advanced_buttons1_add_before : "newdocument,separator",
  21. theme_advanced_buttons1_add : "fontselect,fontsizeselect",
  22. theme_advanced_buttons2_add : "separator,forecolor,backcolor,liststyle",
  23. theme_advanced_buttons2_add_before: "cut,copy,paste,pastetext,pasteword,separator,",
  24. theme_advanced_buttons3_add_before : "tablecontrols,separator",
  25. theme_advanced_buttons3_add : "flash,advhr,separator,fullscreen",
  26. theme_advanced_toolbar_location : "top",
  27. theme_advanced_toolbar_align : "left",
  28. extended_valid_elements : "hr[class|width|size|noshade]",
  29. file_browser_callback : "ajaxfilemanager",
  30. paste_use_dialog : false,
  31. theme_advanced_resizing : true,
  32. theme_advanced_resize_horizontal : true,
  33. apply_source_formatting : true,
  34. force_br_newlines : true,
  35. force_p_newlines : false,
  36. relative_urls : true
  37. });
  38.  
  39. var ajaxfilemanagerurl = "../../plugins/ajaxfilemanager/ajaxfilemanager.php";
  40. function ajaxfilemanager(field_name, url, type, win) {
  41. switch (type) {
  42. case "image":
  43. ajaxfilemanagerurl += "?type=img";
  44. break;
  45. case "media":
  46. ajaxfilemanagerurl += "?type=media";
  47. break;
  48. case "flash": //for older versions of tinymce
  49. ajaxfilemanagerurl += "?type=media";
  50. break;
  51. case "file":
  52. ajaxfilemanagerurl += "?type=files";
  53. break;
  54. default:
  55. return false;
  56. }
  57. var fileBrowserWindow = new Array();
  58. fileBrowserWindow["file"] = ajaxfilemanagerurl;
  59. fileBrowserWindow["title"] = "Ajax File Manager";
  60. fileBrowserWindow["width"] = "782";
  61. fileBrowserWindow["height"] = "440";
  62. fileBrowserWindow["close_previous"] = "no";
  63. tinyMCE.openWindow(fileBrowserWindow, {
  64. window : win,
  65. input : field_name,
  66. resizable : "yes",
  67. inline : "yes",
  68. editor_id : tinyMCE.getWindowArg("editor_id")
  69. });
  70.  
  71. return false;
  72. }
  73. </script>
  74. <script type="text/javascript">
  75. function DodajElement()
  76. {
  77. var element = document.createElement('input');
  78. element.setAttribute('type', 'file');
  79. element.setAttribute('onChange', 'javascript:DodajElement();');
  80.  
  81. var liczba = 0;
  82. var ilosc = document.forms['newsy_edit'].elements.length;
  83. for (var i = 0; i < ilosc; i++ )
  84. {
  85. if (document.forms['newsy_edit'].elements[i].type == 'file')
  86. {
  87. liczba += 1;
  88. }
  89. }
  90.  
  91. element.setAttribute('name', 'file-'+(liczba+1));
  92.  
  93. element.style.display = "block";
  94. element.style.margin= "2px";
  95.  
  96. var div = document.getElementById('dodatkowe');
  97. div.appendChild(element);
  98.  
  99. document.forms["newsy_edit"].dodatkowe_ilosc.value = liczba;
  100. }
  101. </script>
  102. {/literal}
  103. </head>
  104. <body onload="javascript:DodajElement();">


A tak wygląda div o id dodatkowe:
  1. <div id="dodatkowe"><input type="hidden" name="dodatkowe_ilosc"></div>
Go to the top of the page
+Quote Post
John
post
Post #13





Grupa: Zarejestrowani
Postów: 107
Pomógł: 11
Dołączył: 1.08.2007
Skąd: Poland,Warsaw

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


ponownie body onLoad=funkcja()

Ten post edytował John 21.01.2008, 15:44:11
Go to the top of the page
+Quote Post
marrrecki
post
Post #14





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 19.07.2006
Skąd: Lublin

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


akurat tutaj to nie ma znaczenia, bo pierwszy element ładuje się bez żadnego problemu przy ładowaniu okna. dopiero następne przy onchange nie chcą (nadal zaznaczam że wszystko pod IE się dzieje)
Go to the top of the page
+Quote Post
gekon
post
Post #15





Grupa: Zarejestrowani
Postów: 614
Pomógł: 7
Dołączył: 10.11.2003
Skąd: Rzeszów/Kraków

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


@marrrecki:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  3. <title>{$lang_TITLE}</title>
  4. <script type="text/javascript">
  5. function DodajElement(){
  6. var element = document.createElement('input');
  7. element.setAttribute('type', 'file');
  8.  
  9. var liczba = 0;
  10. var ilosc = document.forms['newsy_edit'].elements.length;
  11. for (var i = 0; i < ilosc; i++ ) {
  12. if (document.forms['newsy_edit'].elements[i].type == 'file'){
  13. liczba += 1;
  14. }
  15. }
  16.  
  17. element.setAttribute('name', 'file-'+(liczba+1));
  18.  
  19. element.style.display = "block";
  20. element.style.margin= "2px";
  21.  
  22. var div = document.getElementById('dodatkowe');
  23. var lastInput = div.appendChild(element);
  24.  
  25. document.forms["newsy_edit"].dodatkowe_ilosc.value = liczba;
  26.  
  27. lastInput.onchange = function(){
  28. DodajElement();
  29. }
  30. }
  31. window.onload = function (){
  32. DodajElement();
  33. }
  34. </head>
  35. <form id="newsy_edit" action="#" method="post">
  36. <input type="text" name="dodatkowe_ilosc" />
  37. <div id="dodatkowe">
  38.  
  39. </div>
  40. </form>
  41. </body>
  42. </html>


@John: http://www.w3.org/TR/html401/interact/scripts.html#events - widzisz tu gdzie onLoad? Bo ja tylko onload itd.

Ten post edytował gekon 21.01.2008, 17:59:48
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: 25.08.2025 - 16:01