Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Рациональность JS кода. (https://javascript.ru/forum/misc/11460-racionalnost-js-koda.html)

Илюшенций 25.08.2010 00:51

Рациональность JS кода.
 
Доброго времени суток. Я написал скрипт динамической замены input type="file". После чего JS эксперт мне сказал - "налепленно все в кучу, вы не понимаете что делаете и зачем делаете. у вас проблемы в базовых знаниях, извините, но не могу вам разжевывать". Кто сможет грамотно раскрыть его слова.
functiоn InputFileFake()
{
var fileInput = document.getElementById('file_input');
var fileType = document.createElement('div');
var divFile = document.getElementById('div_file');
var fileButtоn = document.createElement('div');
var fakeFile = document.createElement('div');
fileInput.оnchange = HandleChanges;
fileType.style.display = 'none';
fileType.style.background = 'url(images/form/file_type_icons.png)';
fileType.setAttribute('id','file_type');
fileButton.setAttribute('id','file_button');
fakeFile.setAttribute('id','fake_button');

divFile.appendChild(fileButton);
divFile.appendChild(fakeFile);
divFile.appendChild(fileType);

};
functiоn HandleChanges()
{
fileInput = document.getElementById('file_input');
fileType = document.getElementById('file_type');
file = fileInput.value;
reWin = /.*\\(.*)/;
var fileTitle = file.replace(reWin, "$1"); //выдираем название файла
reUnix = /.*\/(.*)/;
fileTitle = fileTitle.replace(reUnix, "$1"); //выдираем название файла
fileType.innerHTML = fileTitle;

var RegExExt =/.*\.(.*)/;
var ext = fileTitle.replace(RegExExt, "$1");//и его расширение

var pos;
if (ext){
switch (ext.toLowerCase())
{
case 'doc': pos = '0'; break;
case 'bmp': pos = '16'; break;
case 'jpg': pos = '32'; break;
case 'jpeg': pos = '32'; break;
case 'png': pos = '48'; break;
case 'gif': pos = '64'; break;
case 'psd': pos = '80'; break;
case 'mp3': pos = '96'; break;
case 'wav': pos = '96'; break;
case 'ogg': pos = '96'; break;
case 'avi': pos = '112'; break;
case 'wmv': pos = '112'; break;
case 'flv': pos = '112'; break;
case 'pdf': pos = '128'; break;
case 'exe': pos = '144'; break;
case 'txt': pos = '160'; break;
default: pos = '176'; break;
};
fileType.style.display = 'block';
fileType.style.background = 'url(images/form/file_type_icons.png) no-repeat 0 -'+pos+'px';
};

};

После целого часа рассматривания монитора, я заметил что по паскалевским навыкам я объявляю переменные, а только потом их использую, рациональнее будет объявлять сразу когда нужна, ибо JS это умеет.

B@rmaley.e><e 25.08.2010 04:28

Эм, мне кажется или код практически полностью взят отсюда?

Gvozd 25.08.2010 09:22

Цитата:

Сообщение от Илюшенций
После чего JS эксперт мне сказал - "налепленно все в кучу, вы не понимаете что делаете и зачем делаете. у вас проблемы в базовых знаниях, извините, но не могу вам разжевывать".

вы думаете у других экспертов, будет больше желания заниматься данным неблагодарным занятием?

Riim 25.08.2010 13:02

То, что сразу в глаза бросается:

Цитата:

Сообщение от Илюшенций
functiоn InputFileFake()

используя innerHTML можно сильно сократить функцию, она станет заметно понятней.

Цитата:

Сообщение от Илюшенций
functiоn HandleChanges()
{
fileInput = document.getElementById('file_input');
fileType

где var?

Цитата:

Сообщение от Илюшенций
switch (ext.toLowerCase())
{
case 'doc': pos = '0'; break;
case 'bmp': pos = '16'; break;
case 'jpg': pos = '32'; break;
case 'jpeg': pos = '32'; break;
case 'png': pos = '48'; break;
case 'gif': pos = '64'; break;
case 'psd': pos = '80'; break;
case 'mp3': pos = '96'; break;
case 'wav': pos = '96'; break;
case 'ogg': pos = '96'; break;
case 'avi': pos = '112'; break;
case 'wmv': pos = '112'; break;
case 'flv': pos = '112'; break;
case 'pdf': pos = '128'; break;
case 'exe': pos = '144'; break;
case 'txt': pos = '160'; break;
default: pos = '176'; break;
};

я бы сделал через объект, пример:
var obj = {doc: 0, bmp: 16/*, ....*/};
var pos = obj[ext.toLowerCase()];


Часовой пояс GMT +3, время: 20:57.