Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.08.2010, 00:51
Новичок на форуме
Отправить личное сообщение для Илюшенций Посмотреть профиль Найти все сообщения от Илюшенций
 
Регистрация: 25.08.2010
Сообщений: 1

Рациональность 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 это умеет.
Ответить с цитированием
  #2 (permalink)  
Старый 25.08.2010, 04:28
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Эм, мне кажется или код практически полностью взят отсюда?
Ответить с цитированием
  #3 (permalink)  
Старый 25.08.2010, 09:22
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Илюшенций
После чего JS эксперт мне сказал - "налепленно все в кучу, вы не понимаете что делаете и зачем делаете. у вас проблемы в базовых знаниях, извините, но не могу вам разжевывать".
вы думаете у других экспертов, будет больше желания заниматься данным неблагодарным занятием?
Ответить с цитированием
  #4 (permalink)  
Старый 25.08.2010, 13:02
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

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

Сообщение от Илюшенций
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()];
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Грамотная организация кода trasher Общие вопросы Javascript 10 04.02.2010 16:26
помогите задать переменную в js bsgroupua Общие вопросы Javascript 3 01.02.2010 18:28
Самая лучшая книга по JS? ulandj Оффтопик 2 06.04.2009 11:35
Загрузка дополнительного js кода с сервера Anonymous2008 Общие вопросы Javascript 5 20.11.2008 12:33
Как с помощью JS "на-лету" менять часть HTML кода greendoc Общие вопросы Javascript 2 18.03.2008 20:43