Как повесить два действия на кнопку?
Есть калькулятор простенький. Хочу от кнопки = избавится. Чтоб выводил ответ по клику на цифры. Есть 2 функции, одна вводит цифорку в инпут, а вторая считает по кнопке =. Как бы их объединить? Или создать другую функцию. Я чайник совсем
function addChar(input, character) { if(input.value == null || input.value == "0") input.value = character; else input.value += character; } function compute(form) { form.result.value = eval(form.display.value) } кнопочки так выглядят <td align="center" ><input type="button" value="2" onclick="addChar(this.form.display, '2')"></td> <td align="center" ><input type="button" value="3" onclick="addChar(this.form.display, '3')"></td> <td align="center" ><input type="button" value="4" onclick="addChar(this.form.display, '4')"></td> Спасибо |
Нихера не понял, просто по ТЗ в теме.
element.addEventListener('click',foo); element.addEventListener('input',bar); element.addEventListener('keyup',baz); сколько хочешь на один |
svinin_1989, это input.value == null всегда ложно можешь удалить...
|
Вот страничка с калькулятором, хочу убрать кнопку = вобще.
Чтоб решение появлялось во время набора цифр
<!DOCTYPE HTML> <html> <head> </head> <body> <font color="RED" size="18"> <B>КАЛЬКУЛЯТОР</B></font> <br/> <form name="sci-calc"> <table table border="1" > <tbody> <tr> <td align="center" style="background-color: red" ><input type="button" value="1" onclick="addChar(this.form.display, '1') "></td> <td align="center" ><input type="button" value="2" onclick="addChar(this.form.display, '2')"></td> <td align="center" ><input type="button" value="3" onclick="addChar(this.form.display, '3')"></td> <td align="center" ><input type="button" value="4" onclick="addChar(this.form.display, '4')"></td> <td align="center" ><input type="button" value="5" onclick="addChar(this.form.display, '5')"></td> <td align="center" ><input type="button" value="6" onclick="addChar(this.form.display, '6')"></td> <td align="center"><input type="button" value="7" onclick="addChar(this.form.display, '7')"></td> <td align="center"><input type="button" value="8" onclick="addChar(this.form.display, '8')"></td> <td align="center"><input type="button" value="9" onclick="addChar(this.form.display, '9')"></td> <td align="center"><input type="button" value="0" onclick="addChar(this.form.display, '0')"></td> <td align="center"><input type="button" value="." onclick="addChar(this.form.display, '.')"></td> </tr> <tr> <td colspan="6" align="center"><input name="display" value="0" size="55" maxlength="55"></td> <td align="center"><input type="button" value="X" onclick="this.form.display.value = 0 "></td> <td align="center" ><input type="button" value="<" onclick="deleteChar(this.form.display)"></td> <td align="center"><input type="button" value="=" name="enter" onclick="if (checkNum(this.form.display.value)) { compute(this.form) }"></td> <td colspan="3" align="center"><input name="result" size="20" maxlength="20"></td> <td align="center"><input type="button" value="X" onclick="this.form.result.value = 0 "></td> <td align="center" ><input type="button" value="<" onclick="deleteChar(this.form.result)"></td> <td align="center"><input type="button" value="№" onclick="if (checkNum(this.form.display.value)) { sqrt(this.form) }"></td> <td align="center"><input type="button" value="^2" onclick="if (checkNum(this.form.display.value)) { square(this.form) }"></td> <td align="center"><input type="button" value="exp" onclick="if (checkNum(this.form.display.value)) { exp(this.form) }"></td> </tr> <tr> <td align="center"><input type="button" value="*" onclick="addChar(this.form.display, '*')"></td> <td align="center"><input type="button" value="-" onclick="addChar(this.form.display, '-')"></td> <td align="center"><input type="button" value="/" onclick="addChar(this.form.display, '/')"></td> <td align="center"><input type="button" value="+/-" onclick="changeSign(this.form.display)"></td> <td align="center"><input type="button" value="+" onclick="addChar(this.form.display, '+')"></td> <td align="center"><input type="button" value="(" onclick="addChar(this.form.display, '(')"></td> <td align="center"><input type="button" value=")" onclick="addChar(this.form.display, ')')"></td> <td align="center"><input type="button" value="ln" onclick="if (checkNum(this.form.display.value)) { ln(this.form) }"></td> <td align="center"><input type="button" value="cos" onclick="if (checkNum(this.form.display.value)) { cos(this.form) }"></td> <td align="center"><input type="button" value="sin" onclick="if (checkNum(this.form.display.value)) { sin(this.form) }"></td> <td align="center"><input type="button" value="tan" onclick="if (checkNum(this.form.display.value)) { tan(this.form) }"></td> </tr> </tbody></table> </form> <script> element.addEventListener('click',compute(form)); function addChar(input, character) { if(input.value == null || input.value == "0") input.value = character; else input.value += character; } function cos(form) { form.result.value = Math.cos(form.display.value); } function sin(form) { form.result.value = Math.sin(form.display.value); } function tan(form) { form.result.value = Math.tan(form.display.value); } function sqrt(form) { form.result.value = Math.sqrt(form.display.value); } function ln(form) { form.result.value = Math.log(form.display.value); } function exp(form) { form.result.value = Math.exp(form.display.value); } function deleteChar(input) { input.value = input.value.substring(0, input.value.length - 1) } function changeSign(input) { if(input.value.substring(0, 1) == "-") input.value = input.value.substring(1, input.value.length) else input.value = "-" + input.value } function compute(form) { form.result.value = eval(form.display.value) } function square(form) { form.result.value = eval(form.display.value) * eval(form.display.value) } function checkNum(str) { for (var i = 0; i < str.length; i++) { var ch = str.substring(i, i+1) if (ch < "0" || ch > "9") { if (ch != "/" && ch != "*" && ch != "+" && ch != "-" && ch != "." && ch != "(" && ch!= ")") { alert("invalid entry!") return false } } } return true } </script> </body> </html> Вешаю на elem.onclick = function compute(form) { form.result.value = eval(form.display.value) } не срабатывает |
Капец. Я думал там производственный калькулятор, а он бытовой пишет. Скачай готовое и не мучайся.
|
Калькулятор специализированный это его шаблончик
мне нужно просто решение чтоб ответ появлялся в поле сам, без нажатия на =. кнопку = вобще удалить за ненадобностью
|
form.display.addEventListener('input', compute);И в каждой функции что меняет form.display.value добавить в конце compute();Что тут сложного? |
Мне сложно, я совсем не профи
Вот так нужно?
function addChar(input, character) { if(input.value == null || input.value == "0") input.value = character; else input.value += character; return form.display.addEventListener('input', compute); } <td align="center" ><input type="button" value="2" onclick="addChar(this.form.display, '2' compute();)"></td> не срабатывает Не менее важно, чем код, еще куда код вставить)) |
Цитата:
|
Короче, давай хтмл своего кулкулятора, который нужен, без абстракций, а то с таким уровнем боевой подготовки ты до победы не доживешь. )))
|
Вот такая заготовочка, пытаюсь избавится от кнопки =, лучший вариант наверно реакция
на нажатие цифр
<!DOCTYPE HTML> <html> <head> </head> <body> <font color="RED" size="18"> <B>CALC</B></font> <br/> <form name="sci-calc"> <table table border="1" > <tbody> <tr> <td align="center" style="background-color: red" ><input type="button" value="1" onclick="addChar(this.form.display, '1') "></td> <td align="center" ><input type="button" value="2" onclick="addChar(this.form.display, '2' compute();)"></td> <td align="center" ><input type="button" value="3" onclick="addChar(this.form.display, '3')"></td> <td align="center" ><input type="button" value="4" onclick="addChar(this.form.display, '4')"></td> <td align="center" ><input type="button" value="5" onclick="addChar(this.form.display, '5')"></td> <td align="center" ><input type="button" value="6" onclick="addChar(this.form.display, '6')"></td> <td align="center"><input type="button" value="7" onclick="addChar(this.form.display, '7')"></td> <td align="center"><input type="button" value="8" onclick="addChar(this.form.display, '8')"></td> <td align="center"><input type="button" value="9" onclick="addChar(this.form.display, '9')"></td> <td align="center"><input type="button" value="0" onclick="addChar(this.form.display, '0')"></td> <td align="center"><input type="button" value="." onclick="addChar(this.form.display, '.') "></td> </tr> <tr> <td colspan="6" align="center"><input name="display" value="0" size="55" maxlength="55"></td> <td align="center"><input type="button" value="X" onclick="this.form.display.value = 0 "></td> <td align="center" ><input type="button" value="<" onclick="deleteChar(this.form.display)"></td> <td align="center"><input type="button" value="=" name="enter" onclick="if (checkNum(this.form.display.value)) { compute(this.form) }"></td> <td colspan="3" align="center"><input name="result" size="20" maxlength="20"></td> <td align="center"><input type="button" value="X" onclick="this.form.result.value = 0 "></td> <td align="center" ><input type="button" value="<" onclick="deleteChar(this.form.result)"></td> <td align="center"><input type="button" value="№" onclick="if (checkNum(this.form.display.value)) { sqrt(this.form) }"></td> <td align="center"><input type="button" value="^2" onclick="if (checkNum(this.form.display.value)) { square(this.form) }"></td> <td align="center"><input type="button" value="exp" onclick="if (checkNum(this.form.display.value)) { exp(this.form) }"></td> </tr> <tr> <td align="center"><input type="button" value="*" onclick="addChar(this.form.display, '*')"></td> <td align="center"><input type="button" value="-" onclick="addChar(this.form.display, '-')"></td> <td align="center"><input type="button" value="/" onclick="addChar(this.form.display, '/')"></td> <td align="center"><input type="button" value="+/-" onclick="changeSign(this.form.display)"></td> <td align="center"><input type="button" value="+" onclick="addChar(this.form.display, '+')"></td> <td align="center"><input type="button" value="(" onclick="addChar(this.form.display, '(')"></td> <td align="center"><input type="button" value=")" onclick="addChar(this.form.display, ')')"></td> <td align="center"><input type="button" value="ln" onclick="if (checkNum(this.form.display.value)) { ln(this.form) }"></td> <td align="center"><input type="button" value="cos" onclick="if (checkNum(this.form.display.value)) { cos(this.form) }"></td> <td align="center"><input type="button" value="sin" onclick="if (checkNum(this.form.display.value)) { sin(this.form) }"></td> <td align="center"><input type="button" value="tan" onclick="if (checkNum(this.form.display.value)) { tan(this.form) }"></td> </tr> </tbody></table> </form> <script> element.addEventListener('click',compute(form)); function addChar(input, character) { if(input.value == null || input.value == "0") input.value = character; else input.value += character; return form.display.value } form.display.addEventListener('input', compute); function cos(form) { form.result.value = Math.cos(form.display.value); } function sin(form) { form.result.value = Math.sin(form.display.value); } function tan(form) { form.result.value = Math.tan(form.display.value); } function sqrt(form) { form.result.value = Math.sqrt(form.display.value); } function ln(form) { form.result.value = Math.log(form.display.value); } function exp(form) { form.result.value = Math.exp(form.display.value); } function deleteChar(input) { input.value = input.value.substring(0, input.value.length - 1) } function changeSign(input) { if(input.value.substring(0, 1) == "-") input.value = input.value.substring(1, input.value.length) else input.value = "-" + input.value } function compute(form) { form.result.value = eval(form.display.value) } function square(form) { form.result.value = eval(form.display.value) * eval(form.display.value) } function checkNum(str) { for (var i = 0; i < str.length; i++) { var ch = str.substring(i, i+1) if (ch < "0" || ch > "9") { if (ch != "/" && ch != "*" && ch != "+" && ch != "-" && ch != "." && ch != "(" && ch!= ")") { alert("invalid entry!") return false } } } return true } </script> </body> </html> |
В общем очистка кодов от разложения обнажила кошмарную модель куркулятора. Обычно применяются 2 подхода - я не уверен в терминологии, своими словами - операционной и токенизатор. Первый - кнопки давишь, потом = и результат. Второй - производит вычисления из введенной строки раскладывая ее на токены. В рамках js можно записать вместо математических символов сразу названия методов и натравить на строку eval() - так и сделано, но, пилять - в кошмарном соединении с операционной моделью и к тому же с функциями текстового редактора. В итоге быстро формализовать эту бнопню не удалось. Похоже будет проще найти куда нафтыкать чего там надо в оригинале.
На чем остановился на данный момент процитировано ниже. |
<!DOCTYPE html> <html lang="ru" dir="ltr"> <head> <meta charset="utf-8"> <style> .mega-calc{ border-collapse:collapse; } .mega-calc tr { border:1px solid #eee; } .mega-calc td { text-align:center; padding:3px; } </style> </head> <body> <font color="RED" size="18"><B>CALC</B></font> <br/> <form name="sci-calc" id="form-mega-calc"> <table class="mega-calc"><tbody> <tr> <td><input type="button" value="1"></td> <td><input type="button" value="2"></td> <td><input type="button" value="3"></td> <td><input type="button" value="4"></td> <td><input type="button" value="5"></td> <td><input type="button" value="6"></td> <td><input type="button" value="7"></td> <td><input type="button" value="8"></td> <td><input type="button" value="9"></td> <td><input type="button" value="0"></td> <td><input type="button" value="."></td> </tr> <tr> <td colspan="6"><input name="display" value="0" size="55" maxlength="55"></td> <td><input type="button" d="display" value="X"></td> <!-- reset display --> <td><input type="button" d="display" value="<"></td> <!-- deleteChar --> <td><input name="enter" type="button" value="="></td> <!-- ENTER --> <td colspan="3"><input name="result" size="20" maxlength="20"></td> <td><input type="button" d="result" value="X"></td> <!-- reset --> <td><input type="button" d="result" value="<"></td> <!-- delete char--> <td><input type="button" d="result" value="№"></td> <!-- sqrt --> <td><input type="button" d="result" value="^2"></td> <!-- square --> <td><input type="button" d="result" value="exp"></td> <!-- exp --> </tr> <tr> <td><input type="button" value="*"></td> <!-- addChar --> <td><input type="button" value="-"></td> <!-- addChar --> <td><input type="button" value="/"></td> <!-- addChar --> <td><input type="button" value="+/-"></td> <!-- changeSign --> <td><input type="button" value="+"></td> <!-- addChar --> <td><input type="button" value="("></td> <!-- addChar --> <td><input type="button" value=")"></td> <!-- addChar --> <td><input type="button" value="ln"></td> <td><input type="button" value="cos"></td> <td><input type="button" value="sin"></td> <td><input type="button" value="tan"></td> </tr> </tbody></table> </form> <script> var MegaCalc= new function(){ var D=document, form=D.getElementById('form-mega-calc'), fres=form.result, fdisp=form.display, M=function(n){ if(['cos','sin','tan','sqrt','ln','exp'].indexOf(n)>-1) return fres.value = Math[n](fdisp.value); else if(n=='sqrt') return fres.value = eval(fdisp.value)*eval(fdisp.value); }, delChar=function(el){ el.value=el.value.substring(0,el.value.length-1); }, chSign=function(el) { if(el.value.substring(0, 1) == "-") el.value = el.value.substring(1, el.value.length); else el.value = "-" + el.value; }, checkNum=function(str) { for (var ch, i=0; i<str.length; i++) { ch=str.substring(i,i+1); if ((ch < 0 || ch > 9) && '/*+-.()'.indexOf(ch)==-1) return false } return true; }, compute=function() { fres.value=eval(fdisp.value); }, route=function(e){ var el=e.target,v,d; if(el.type && el.type=='button'){ v=el.value; d=el.getAttribute('d'); /* todo */ if(!M(v)) fdisp.value+=v; } }; form.addEventListener('click',route); }; </script> </body> </html> |
Сасибо что возитесь с моей проблемой))
А почему нельзя задать выполнение
function compute(form) { form.result.value = eval(form.display.value)} при каждом нажатий цифровых кнопок? нажал 1, в поле появился 1 и выполнилась функция compute(form) В input name="result" 1 нажал + появился + input name="result" 1 нажал 2 появилось 2 и выполнилась функция compute(form) input name="result" 3 |
Конечно можно, профессор до меня так и написал, просто он запутал нечаянно тебя листенером, листенер не нужен, впиши compute(this.form) во все онклики после того, что там уже написано через точку-запятая ;
Ты для себя пишешь, да? Это нереальный колхоз если задумывается для людей. Ну вот, если пишешь для себя, то спешить некуда и спокойно разберись. Я ниасилил индустриальное решение этого колхоза, умываю руки. |
Не получается, впиши compute(this.form) во все онклики после ;
ТАК НЕ ПОЛУЧАЕТСЯ
<td align="center" ><input type="button" value="2" onclick="addChar(this.form.display, '2')""compute(this.form)"></td> ТАК НЕ ПОЛУЧАЕТСЯ <td align="center" ><input type="button" value="2" onclick="addChar(this.form.display, '2') ;compute(this.form)"></td> ТАК НЕ ПОЛУЧАЕТСЯ <td align="center" ><input type="button" value="2" onclick="addChar(this.form.display, '2') ;compute(this.form);"></td> КАКОЙ ЖЕ ПРАВИЛЬНЫЙ ВАРИАНТ? |
Цитата:
onclick="compute(this.form);" посмотри работает или нет. И еще, ты вручную передаешь значение, которое уже записано в валуе addChar(this.form.display, '2') == addChar(this.form.display, this.value) |
обратно не работает
onclick="addChar(this.form.display, '2') ;compute(this.form);"
добавляет двойку просто, в поле result не выводит результат результат выводит только равно <td align="center"><input type="button" value="=" name="enter" onclick="if (checkNum(this.form.display.value)) { compute(this.form) }"></td> там присутствует compute(this.form) плевая по идее ведь задача, никто решить не может)) |
Никто не может, кроме тебя. Придумать такую запутанную хрень тямы хватило, значит хватит и на распутывание. Иначе это несправедливо: запутал ты - а требуешь с других. Кстати, в истории был такой случай, про царя Гордия почитай. )
|
Часовой пояс GMT +3, время: 03:36. |