Javascript.RU

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

Код калькулятора с использованием методов
Здравствуйте!

Подскажите пожалуйста, по двум вопросам:

Имеется калькулятор:

<from id = 'calculator'>
    <table>
        <tr>
            <td>
                <div align="center">

                    <input id="screen" type="text" value="" size="16" class="display" readonly="readonly" />
                </div>
            </td>
        </tr>

<tr>
    <td class="buttons">
        <div align="center">

<input id="btn_1" type="button" value="1" />
<input id="btn_2" type="button" value="2" />
<input id="btn_3" type="button" value="3" />
<input id="add" type="button" value="+" class="operator" />
        </div>
        <div align="center">
<input id="btn_4" type="button" value="4" />
<input id="btn_5" type="button" value="5" />
<input id="btn_6" type="button" value="6" />
<input id="sub" type="button" value=" - " class="operator" />
        </div>
<input id="btn_7" type="button" value="7" />
<input id="btn_8" type="button" value="8" />
<input id="btn_9" type="button" value="9" />
<input id="mult" type="button" value=" * " class="operator" />
        <div align="center">
<input id="clr" type="button" value=" c " class="clear" />
<input id="btn_0" type="button" value="0" />
<input id="calculate" type="button" value="  =  " class="eval" />
<input id="div" type="button" value=" / " class="operator" />


        </div>
            </td>
        </tr>
    </table>
</from>



var a,b,c;
var action = '';

function getValue(id) {
    var res = document.getElementById(id).value - '';
    if (!isNaN(res))
        return res;
}

function PutNum(val) {
    document.getElementById("screen").value = (document.getElementById("screen").value + val)-0;
}

function add () {
    a = getValue("screen");
    document.getElementById("screen").value = 0;
    action = "+";
}

function sub() {
    a = getValue("screen");
    document.getElementById("screen").value = 0;
    action = "-";
}

function mult() {
    a = getValue("screen");
    document.getElementById("screen").value = 0;
    action = "*";
}

function div() {
    a = getValue("screen");
    document.getElementById("screen").value = 0;
    action = "/";
}

function clr() {
    document.getElementById("screen").value = 0;
}


function calculate() {
    b = getValue("screen");
    switch(action) {
        case "+":
            c = a + b;
            break;
        case "-":
            c = a - b;
            break;
        case "*":
            c = a * b;
            break;
        case "/":
            if (b == 0) {
                alert('Division durch Null kann nicht sein!');
            }
            else {
                c = a / b;
            }
            break;
    }
    document.getElementById("screen").value = c;
}

window.onload = function () {

    for (var i = 0; i < 10; i++) {
        (function (val) {
            document.getElementById("btn_" + val).onclick = function () {
                PutNum(val);
            }
        })(i);
    }
    document.getElementById("add").addEventListener("click", add);
    document.getElementById("calculate").addEventListener("click", calculate);
    document.getElementById("sub").addEventListener("click", sub);
    document.getElementById("mult").addEventListener("click", mult);
    document.getElementById("div").addEventListener("click", div);
    document.getElementById("clr").addEventListener("click", clr);
 }


1 -й Вопрос что делает функция:
function PutNum(val) {
    document.getElementById("screen").value = (document.getElementById("screen").value + val)-0;


Как я понимаю: велью а + атрибут велью б и минус 0.
Можно ли как то проще написать или это вполне адекватно? ))
В исполнении 0 получается промежуточное значение, т.е. оператор, как его заменить на само значение оператора, чтоб вместо ноля в калькуляторе отображался + - / *. Пробовал заменить, но минус считает криво.

2-й Вопрос, что делает эта функция, для чего используется цикл:

window.onload = function () {

    for (var i = 0; i < 10; i++) {
        (function (val) {
            document.getElementById("btn_" + val).onclick = function () {
                PutNum(val);
            }
        })(i);
    }
    document.getElementById("add").addEventListener("click", add);
    document.getElementById("calculate").addEventListener("click", calculate);
    document.getElementById("sub").addEventListener("click", sub);
    document.getElementById("mult").addEventListener("click", mult);
    document.getElementById("div").addEventListener("click", div);
    document.getElementById("clr").addEventListener("click", clr);
 }


3 - й Вопрос, можно ли этот код допиписать с использованием методов:

function Calculator() {
    var methods = {
        "+" : function(a,b) {
            return a + b;
        },
        "-" : function(a,b) {
            return a - b;
        },
        "*" : function(a,b) {
            return a * b;
        },
        "/" : function(a,b) {
            return a / b;
        }
    }
}


Заранее очень Благодарен!
Ответить с цитированием
  #2 (permalink)  
Старый 02.02.2016, 13:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от hbsv
<from id = 'calculator'>
на всякий случай!!!
Ответить с цитированием
  #3 (permalink)  
Старый 02.02.2016, 16:25
Аватар для Leon-on12
Аспирант
Отправить личное сообщение для Leon-on12 Посмотреть профиль Найти все сообщения от Leon-on12
 
Регистрация: 07.04.2015
Сообщений: 65

2: window.onload при загрузке окна = function () выполнить функцию.
Дальше цикл для назначения обработчика событий на каждую из цифр.
Дальше обработчик событий и назначение соответствующего действия для каждой кнопки.
Ответить с цитированием
  #4 (permalink)  
Старый 02.02.2016, 18:30
Интересующийся
Отправить личное сообщение для hbsv Посмотреть профиль Найти все сообщения от hbsv
 
Регистрация: 06.01.2016
Сообщений: 27

Спасибо Большое!

С 3-м вопросом, может кто помочь?
Ответить с цитированием
  #5 (permalink)  
Старый 03.02.2016, 01:39
Интересующийся
Отправить личное сообщение для hbsv Посмотреть профиль Найти все сообщения от hbsv
 
Регистрация: 06.01.2016
Сообщений: 27

Отбой Уже решил, остался вопрос только с нулем.
Есть у кого какие идеи переписать или решить ?
Ответить с цитированием
  #6 (permalink)  
Старый 15.02.2016, 08:40
Интересующийся
Отправить личное сообщение для hbsv Посмотреть профиль Найти все сообщения от hbsv
 
Регистрация: 06.01.2016
Сообщений: 27

Сообщение от рони Посмотреть сообщение
на всякий случай!!!
Да кстати, а почему оно выделяет? Ошибка? Так вроде все работает, что не так?
Ответить с цитированием
  #7 (permalink)  
Старый 15.02.2016, 08:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от hbsv
что не так?
нет такого тега в html
Ответить с цитированием
  #8 (permalink)  
Старый 15.02.2016, 10:25
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

рони,hbsv
Тег form есть в HTML, но в этой программе ни from, ни form не нужны - здесь нет никакого submit
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Код ответа сервера и обновление iframe alexdemi911 Общие вопросы Javascript 6 10.08.2015 22:30
Не работает код Kendrick Internet Explorer 5 12.09.2012 16:14
Требуется выводить код рекламного блока Adsense из файла JavaScript??? speedflow Элементы интерфейса 0 26.05.2012 15:50
Получить код js-скрипта, находящегося в файле на сервере RomanA Общие вопросы Javascript 4 04.04.2012 09:53
Как узнать динамический код страницы? gosha13 Общие вопросы Javascript 5 27.07.2009 13:31