Javascript.RU

Моя первый скрипт

Всем здравствуйте.

Вот уже почти 2 года прошло с того момента, как я зарегистрировался на этом портале с целью изучения языка JavaScript. Сказать по правде, продвинулся за столь долгое время не на много вперед. Не так давно приобрел книгу Д. Флэнаган - JavaScript. Подробное руководство.

С её помощью надеюсь у меня это получится! :-)

Цель ведения блога тут, научиться профессионально программировать на JavaScript, при помощи единомышленников на этом сайте.

Зачем оно мне надо? Это мое хобби.

Из вышеописанного следует, что начинать я буду с примитивов и постоянно расти.

На первый мой код меня натолкнул следующий листинг в книжке Флэнагана:

hex_string = "0x" + n.toString(16)

Как понятно из листинга, переменная n, к примеру, обладающая числовым значением 5 (в десятеричной системе счисления) переводится в шестнадцатеричную систему счисления (при помощи метода toString()) и присваивается переменной hex_string.

После прочтения листинга, мне захотелось самому написать скрипт, который бы переводил числа в любую из 3-х систем счисления (2,8,16). И спустя 2 часа мне это удалось :-)

Фрагмент html:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<table cellpadding="1" cellspacing="1" border="0" width="500">
	<form>
		
		<tr>
			<td>Введите число:</td>
			<td><input type="text" id="stroka"></td>
		</tr>
		
		<tr>
			<td>Выберите систему счисления:</td>
			<td>
				<select id="system" size="1">
					<option value="2" onclick="num_to_s(this.value)">Двоичная</option>
					<option value="8" onclick="num_to_s(this.value)">Восьмеричная</option>
					<option value="16" onclick="num_to_s(this.value)">Шестнадцатеричная</option>
			</select>
			</td>
		</tr>
		
		<tr>
			<td valign="top">Результат:</td>
			<td><textarea id="res"></textarea></td>
		</tr>

	</form>
</table>
</body>
</html>

Код js:

function num_to_s(sys){
		var chislo = Number(document.getElementById('stroka').value);
		var res = document.getElementById('res');
			if(sys == 16){
				res.value='0x'+chislo.toString(16);
			} else {
				res.value=chislo.toString(sys);
			}
			
			if(isNaN(chislo)){
				res.value='Введите число...';
				res.style.backgroundColor='#ffff00';
			} else {
				res.style.backgroundColor='#ffffff';
			}
	}

Как это работает? Просто, вводите число, выбираете систему счисления и получаете результат.

UPD 1: В IE 8 не работает. Понимаю, что надо стремится к кроссбраузерности, но мне, пока, до этого далеко. Тестировал скрипт в FF 3.6.8

UPD 2: Пример на моей страничке

+1

Автор: Олег Торбасов (не зарегистрирован), дата: 14 августа, 2010 - 16:10
#permalink

IE не понимает клика по опции. Вешайте тот же самый код на событие change самого комбобокса — всё будет работать.

Выбор системы счисления лучше сделать радиокнопкой — это сэкономит пользователю один клик. Непонятно, почему вывод идёт в textarea, а не ещё один input.

И советую пересмотреть всю вёрстку. Таблицы и HTML 4 Transitional — это же прошлый век.


Автор: reutovo, дата: 14 августа, 2010 - 19:40
#permalink

Спасибо за совет, переписал под checkbox`ы, там с onChange все в порядке, да и лучше даже. Почему textarea, сам не знаю. На счет дизайна, попробую переделать с помощью CSS и div`ов.

UPD: IE8 при событие onChange, притормаживает вывод, переделываю обратно на onClick. В FF 3.6.8 все ок.


Автор: Ринат Ибрагимов, дата: 14 августа, 2010 - 16:54
#permalink

перевод чисел из любой системы счисления в любую другую

function nsys(num,sys1,sys2){//перевод числа num из sys1 системы счисления в sys2
 return Number(parseInt(num+'',sys1).toString(sys2))
}

Автор: reutovo, дата: 15 августа, 2010 - 12:17
#permalink

UPD: Ваш код не работает. NaN и все. Проверял в ff 3.6.8 и ie 8

var nsys = function(num, sys) { return Number(parseFloat(num.toString(sys))); }

Необходимости в переменной sys2 вообще нет. Т.к. переменной num можно присвоить любое значение - 1.00e+23, 10001110010, 0xfffe1 и функция корректно переведет.

Так даже элегантнее получился код


Автор: ixth, дата: 16 августа, 2010 - 23:01
#permalink

Зачем приводить результат к Number? В итоге получим то же, что было на входе.

>>> var nsys = function(num, sys) { return Number(parseFloat(num.toString(sys))); } 
undefined
>>> nsys 
[object Function]
>>> nsys('11', 2) 
11

Автор: reutovo, дата: 18 августа, 2010 - 17:39
#permalink

Я не знаю почему вы получили, то же, что и на входе. Данные из формы передаются как строки, parseFloat округляет и преобразует в числовой формат строку. Number более радикальный способ перевода строки в числовой формат, своего рода подстраховка получается. ;-)

Если не верите можете посмотреть тут, в разделе склад.


Автор: Гость (не зарегистрирован), дата: 23 марта, 2011 - 12:46
#permalink

Названия доставляют: "chislo", "stroka"


Автор: Гость (не зарегистрирован), дата: 7 июля, 2011 - 14:50
#permalink

попробуйте вот такой скрипт:
function to16(n10){
h="0123456789abcdef"
k=n10
x=new Array()
rezult="0x"
for (i=0;n10>=16; i++){j=n10%16
x[i]=j
n10=(n10-x[i])/16
}
x[i]=n10
for (i=x.length-1; i>=0; i--){ rezult+= h.charAt(x[i]) }
return rezult
}


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
10 + 4 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Другие записи этого автора
Больше записей нет. Прокомментируйте эту запись - может быть, тогда он что-нибудь еще хорошее напишет ;)
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Популярные таги
Последние комментарии
Последние темы на форуме
Forum