Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Срочно нужна помощь по списку 
:(
    Опции темы
jeans1986
Дата 28.4.2007, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 31.3.2007

Репутация: нет
Всего: нет



Доброе утро.
Есть такой код:
Код

<table>
<tr>
<td><p class=zag2>Общее место</td>
<td><input style="font-weight: bold" size=40 class=input type=text name=total_size value='1024'></td>
<td align=center>
     <select name="total_type">
       <option value=bytes selected>bytes</option>
       <option value=kb>kb</option>
       <option value=mb>mb</option> 
       <option value=gb>gb</option>
    </select>
</td>
</tr>
</table>


Как зделать чтоб при изменении значениий в списке изменялось на соответсвующее, т.е если написано 1024 байт, при выборе мб чтоб писалось 1 мб, и т.д. 
ЗАРАНЕЕ ВСЕХ БЛАГОДАРЮ,
PM MAIL   Вверх
Alx
Дата 28.4.2007, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



как-то так:

Код

<script language="JavaScript">
if(!Array.prototype.indexOf) Array.prototype.indexOf = function(el) {
   for(var i=0; i< this.length; i++)
      if(el === this[i]) return i;
   return -1;
}

var exts = ['bytes','kb','mb','gb']
current_ext = 'bytes';
function myFunc(val)
{   var inpObj = document.getElementsByName('total_size')[0];
    var inpVal = inpObj.value;
    var dif = exts.indexOf(val)-exts.indexOf(current_ext);
    if(dif == 0) return;
    else if(dif>0)
    {   for(var i=0;i<dif;i++) inpVal /= 1024;
    }
    else if(dif<0)
    {   for(var i=0;i<Math.abs(dif);i++) inpVal *= 1024;
    }
    current_ext = val;
    inpObj.value = inpVal;
}
</script>
<table>
<tr>
<td><p class=zag2>Îáùåå ìåñòî</td>
<td><input style="font-weight: bold" size=40 class=input type=text name=total_size value='1024'></td>
<td align=center>
     <select name="total_type" onchange="myFunc(this.value);">
       <option value=bytes selected>bytes</option>
       <option value=kb>kb</option>
       <option value=mb>mb</option>
       <option value=gb>gb</option>
    </select>
</td>
</tr>
</table>



--------------------
PM MAIL WWW ICQ   Вверх
jeans1986
Дата 28.4.2007, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 31.3.2007

Репутация: нет
Всего: нет



Что не совсем правильно работает.  Вот иногда глючит. т. е если например 2 гб он думает чо написано в баитах и начинате мудрить. можете подсказать как доделать это скрипт.
PM MAIL   Вверх
Alx
Дата 28.4.2007, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



jeans1986
при выборе пункта из селекта скрипт переводит строку в инпуте, учитывая её прошлое измерение.
по умолчанию (при загрузке страницы) это bytes.

поэтому когда вы пишете 2, а затем выбираете gb, он переводит 2 байта в гигабайты: все верно. по крайней мере так я понял задачу. если вам нужно что-то другое, объясните, пожалуйста, подробнее.

если вы хотите 2 гигабайта перевести в байты, то вы вначале должны выбрать в селекте gb (не обращая внимания на изменение инпута), затем написать в инпуте "2" и выбрать в селекте bytes.

вот, только лучше так, что-то я сразу не сообразил:

Код

<script language="JavaScript">
if(!Array.prototype.indexOf) Array.prototype.indexOf = function(el) {
   for(var i=0; i< this.length; i++)
      if(el === this[i]) return i;
   return -1;
}

var exts = ['bytes','kb','mb','gb']
current_ext = 0;
function myFunc(val)
{   var inpObj = document.getElementsByName('total_size')[0];
    var dif = exts.indexOf(val)-current_ext;
    current_ext = exts.indexOf(val);
    if(dif == 0) return;
    else if(dif>0) inpObj.value /= Math.pow(1024,dif);
    else if(dif<0) inpObj.value *= Math.pow(1024,Math.abs(dif));
}
</script>
<table>
<tr>
<td><p class=zag2>Îáùåå ìåñòî</td>
<td><input style="font-weight: bold" size=40 class=input type=text name=total_size value='1024'></td>
<td align=center>
     <select name="total_type" onchange="myFunc(this.value);">
       <option value=bytes selected>bytes</option>
       <option value=kb>kb</option>
       <option value=mb>mb</option>
       <option value=gb>gb</option>
    </select>
</td>
</tr>
</table>
 

Это сообщение отредактировал(а) Alx - 28.4.2007, 16:44


--------------------
PM MAIL WWW ICQ   Вверх
SelenIT
Дата 30.4.2007, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Вариация на тему. Предполагается, что опции идут строго в таком порядке, как есть, без пропусков (т.е. шаг от опции к опции всегда равен 1024):
Код

<script language="JavaScript">
function myFunc(types) {
   var total_size = document.getElementsByName('total_size')[0];
   if (!myFunc.oldtype) {
      for (var i=0; types.options[i]; i++) {
         if (types.options[i].defaultSelected) myFunc.oldtype = i;
      }
   }
   total_size.value = total_size.value * Math.pow(1024,myFunc.oldtype-types.selectedIndex);
   myFunc.oldtype = types.selectedIndex;
}
</script>
<table>
<tr>
<td><p class=zag2>Общее место</td>
<td><input style="font-weight: bold" size=40 class=input type=text name=total_size value='1024'></td>
<td align=center>
     <select name="total_type" onchange="myFunc(this);">
       <option value=bytes selected>bytes</option>
       <option value=kb>kb</option>
       <option value=mb>mb</option>
       <option value=gb>gb</option>
    </select>
</td>
</tr>
</table>



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0686 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.