Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помощь с функциональностью (https://javascript.ru/forum/misc/53297-pomoshh-s-funkcionalnostyu.html)

DeV1doR 28.01.2015 20:33

Помощь с функциональностью
 
Хочу улучшить калькулятор. Ниже код:
<!DOCTYPE html>
<html>
	<head>
		<style type="text/css">
			button {
				text-align: center;
			}

			input {
				text-align: right;
				padding-left: 5px;
				padding-right: 5px;
			}

			button, input {
				width: 100%;
				height: 35px;
			}
		</style>
		<script type="text/javascript">
			"use strict";

			function typeSomething(id) {
				myText.value += id.innerHTML;
			}

			function clearSomething() {
				myText.value = '';
			}

			function calculation() {
				myText.value = eval(myText.value);
			}

			function minusOne() {
				myText.value = myText.value.slice(0,-1);
			}
		</script>
	</head>
	<body>
		<table id="numbers">
			<tr>
				<td colspan="4"><input id="myText" value=""/></td>
			</tr>
			<tr>
				<td colspan="3"><button id="ClearAll" onClick="clearSomething()">Clear All</button></td>
				<td><button id="Minus1" onClick="minusOne()"><-</button></td>
			</tr>
			<tr>
				<td><button id="Seven" onClick="typeSomething(this)">7</button></td>
				<td><button id="Eight" onClick="typeSomething(this)">8</button></td>
				<td><button id="Nine" onClick="typeSomething(this)">9</button></td>
				<td><button id="Devide" onClick="typeSomething(this)">/</button></td>
			</tr>
			<tr>
				<td><button id="Four" onClick="typeSomething(this)">4</button></td>
				<td><button id="Five" onClick="typeSomething(this)">5</button></td>
				<td><button id="Six" onClick="typeSomething(this)">6</button></td>
				<td><button id="Multiply" onClick="typeSomething(this)">*</button></td>
			</tr>
			<tr>
				<td><button id="One" onClick="typeSomething(this)">1</button></td>
				<td><button id="Two" onClick="typeSomething(this)">2</button></td>
				<td><button id="Three" onClick="typeSomething(this)">3</button></td>
				<td><button id="Minus" onClick="typeSomething(this)">-</button></td>
			</tr>
			<tr>
				<td><button id="dot" onClick="typeSomething(this)">.</button></td>
				<td><button id="Zero" onClick="typeSomething(this)">0</button></td>
				<td><button id="Equal" onClick="calculation()">=</button></td>
				<td><button id="Plus" onClick="typeSomething(this)">+</button></td>
			</tr>
		</table>
	</body>
</html>


1) Как сделать, что бы функция minusOne() убирала не только последний символ, а любой?(например- число 1234)Моя функция будет убирать 4, где бы не стоял мигающий курсор. Надо сделать так, что бы она удаляла последнее число там, где как раз, таки курсор.

2) Как сделать ограничение по вводу input?(нашел maxlength, но он не пашет).

3) Критику в студию):)

ПС: Моя почти первая программка, не включая это http://javascript.ru/forum/misc/5219...i-dannymi.html. Спс Рони, препод заценил)

danik.js 28.01.2015 23:19

Цитата:

Сообщение от DeV1doR
где как раз, таки курсор.

input.selectionStart, input.selectionEnd - начало и конец выделения.
Цитата:

Сообщение от DeV1doR
нашел maxlength, но он не пашет

Уверен?
<input type="text" maxlength="1" />


Цитата:

Сообщение от DeV1doR
onClick

Блин глаза режет этот onClick. Че ж ты тогда не пишешь colSpan? HTML регистронезависим, пиши в нижнем регистре.

danik.js 28.01.2015 23:23

Цитата:

Сообщение от DeV1doR
Как сделать ограничение по вводу input?(нашел maxlength, но он не пашет)

А, я понял. Ограничение идет только для ввода пользователем. А при изменении value скриптом ты уже сам должен сделить.

Замени все "myText.value = xxx" на "setValue(xxx)":

function setValue(value) {
    myText.value = value.substring(0, myText.maxLength);
}

DeV1doR 29.01.2015 00:16

danik.js,
спс, сейчас попробуем, что получиться. На счет onClick, где один раз так увидел, и запомнилось...

DeV1doR 29.01.2015 01:52

danik.js,
function minusOne() 
			{
				var input = document.getElementById('myText');
				input.value =  input.value.slice(input[0],input.selectionStart-1) + input.value.slice(input.selectionStart);

			}


С этим вроде разобрался(спс за наводку), а
function setValue(value) {
    myText.value = value.substring(0, myText.maxLength);
}


как мне быть с
function typeSomething(id) {
                myText.value += id.innerHTML;
            }

?

danik.js 29.01.2015 02:00

Цитата:

Сообщение от DeV1doR
value.slice(input[0]

Какого хрена? Что в input[0] и зачем ты это передаешь в splice?
Цитата:

Сообщение от DeV1doR
как мне быть

Для начала разверни запись. += это сокращенная форма какой записи?

danik.js 29.01.2015 02:07

Цитата:

Сообщение от danik.js
Для начала разверни запись

Можно иначе решить проблему.
Ты плюсуй не всю innerHTML, а только ту ее часть, которая еще поместится в value. Хотя у тебя innerHTML для всех кнопок состоит из одного символа, можно и без substring обойтись. Без разницы в общем.

DeV1doR 29.01.2015 02:08

danik.js,
в input[0] отсчет с 1 символа, а в slice передаю, что бы скопировать(ну я хз, как по другому сделать).

myText.value += id.innerHTML -> myText.value = myText.value +id.innerHTML.

danik.js 29.01.2015 02:46

Цитата:

Сообщение от DeV1doR
в input[0] отсчет с 1 символа

Че несешь?

<input value="bla bla" id="myText" />
<script>
var input = document.getElementById('myText');
alert(input[0]);
</script>


Цитата:

Сообщение от DeV1doR
в slice передаю, что бы скопировать(ну я хз, как по другому сделать).

Открой документацию по методу slice и посмотри какие аргументы он принимает. Пока что у тебя получается вызов .slice(undefined, 123)

DeV1doR 29.01.2015 02:58

danik.js,
https://developer.mozilla.org/ru/doc...ts/Array/slice
Если begin опущен, slice() начинает работать с индекса 0.

input.value = input.value.slice(0,input.selectionStart-1) + input.value.slice(input.selectionStart);
Может пишу опять хрень, но так?:-E


Часовой пояс GMT +3, время: 01:15.