Помощь в изменении кода javascript
Здравствуйте. Я только-только начинаю изучать javascript, в основном работаю с html/css , но дошел до того, что без javascript мне не обойтись.
У меня есть код, отвечающий за вывод информации в Код:
<input type='text'>
var main_input = document.getElementById('input');
var main_output = document.getElementById('output');
function EnterCommand(){
if (main_input.value == 'test'){
SendMessage();
return;
}
main_output.innerHTML = 'Команда не существует';
}
function SendMessage(){
main_output.innerHTML = 'Просто тест';
}
Как вы уже поняли, скрипт выводит сообщение о написанной пользователем команды. Если же такой команды нет, то выполняется команда:
function SendMessage(){
main_output.innerHTML = 'Просто тест';
Но в этом скрипте мне нужно кое-что добавить, а именно: При отправки команды, поле Код:
<input type='text'>Еще бы хотелось переносить на новую строку каждую команду. То есть сейчас, когда пользователь ввел новую команду, то предыдущая удаляется, а хотелось бы, чтобы прошлая команда сохранялась, а следующая писалась уже на новой строке. В html за это отвечает тэг <br>, но в javascript я ньюби, поэтому не знаю как все это реализовывается. P.S Команд будет не две и не три, их будет сотни, неужели нужно писать для каждой команды свой кусок кода или можно обойтись какой нибудь другой конструкцией? К примеру - switch. Но честно, я не знаю как перевести мой javascript код в конструкцию switch. Мне кажется, она сильно облегчит мне задачу :) |
input.value = ''; // очищение текущего значения инпута el.innerHTML += 'новая строка' + '<br>'; // добавление новой строки |
Спасибо большое. Но не могли бы вы мне подсказать, куда именно эти куски кода вставлять?
|
Проснулся - разобрался. Дело было в исходном коде. На сайт я его предоставил несколько изменив.
А вот насчет проблемы в 100 и более команд, может ответить мне кто нибудь? Неужели для каждой команды нужно писать весь этот код, или можно пойти другим путем? |
WorM32, вы все достали с такими советами:
el.innerHTML += 'новая строка' + '<br>';Нельзя так делать, нельзя! foo += bar - это foo = foo + bar, перезапись всего содержимого. same4, Если я правильно понял, то делается то что вам надо примерно так:
<style>
.warning{color: red}
#main-output p{margin:0; padding:0}
</style>
<input type='text' id="main-input"><input type='button' id="main-button" value="go">
<div id="main-output"></div>
<script>
var input = document.getElementById('main-input'),
button = document.getElementById('main-button'),
output = document.getElementById('main-output');
function enterCommand(){
if (input.value in commandList) commandList[input.value]();
else out('Команда не существует', 'warning');
}
button.onclick = enterCommand;
var commandList = {
test: function(){
out('Просто тест')
},
test2: function(){
out('Просто тест2')
}
};
function out(msg, cls){
var p = document.createElement('p');
p.appendChild(document.createTextNode(msg));
if(cls) p.className = cls;
output.appendChild(p)
}
</script>
P.S. В js сообществе принято с заглавных букв писать только конструкторы. |
Все, разобрался! Спасибо большое вам! Вы мне очень помогли! Возможно будут еще вопросы от меня, но я надеюсь их исправить сам. Если же нет - отпишусь тут.
|
Aetae,
У меня тут одна проблемка появилась.. При <div id="main-output"></div> Все выходит супер, но проблема в том, что мне нужно выводить результат в <textarea> </textarea> Естественно, чтобы появлялась полоса прокрутки, если введено много команд. При использовании <div id="main-output"></div> после отправки порядка 10 команд, все это выходит за рамки положенного. Поэтому прошу помочь с отправкой результатов в textarea P.S И еще.. В моем изначальном коде, при нажатии энтер команда автоматически отправлялась в форму. Пользовался командой onclick = 'EnterCommand(); return false;' Написана она была в HTML коде. Сейчас же она не работает. (Пытался подставлять в разные места return false; - толку 0) |
Aetae,
И? Чем перезапись небольшого кусочка так плоха? Прошу аргументированный ответ с тестами производительности ;) |
WorM32, Так просто делать не надо и всё. Нет никакого преимущества в том чтобы сделать так, зато потенциальных граблей и трудновылавливаемых багов - завались.
same4, Какие проблемы задать высоту?
<style>
.warning{color: red}
#main-output p{margin:0; padding:0}
#main-output {overflow:auto; height:100px; direction:rtl; text-align:left}
</style>
<input type='text' id="main-input"><input type='button' id="main-button" value="go">
<div id="main-output"></div>
<script>
var input = document.getElementById('main-input'),
button = document.getElementById('main-button'),
output = document.getElementById('main-output');
function enterCommand(){
if (input.value in commandList) commandList[input.value]();
else out('Команда не существует', 'warning');
}
button.onclick = enterCommand;
var commandList = {
test: function(){
out('Просто тест')
},
test2: function(){
out('Просто тест2')
}
};
function out(msg, cls){
var p = document.createElement('p');
p.appendChild(document.createTextNode(msg));
if(cls) p.className = cls;
output.appendChild(p)
}
</script>
|
<!Doctype html>
<html>
<head>
<meta charset="utf-8">
<style>
b {marginLeft:2pt;}
</style>
</head>
<body>
<div id="first">test 1 </div>
<div id="second">test 2</div>
<script type="text/javascript">
var f = document.getElementById("first");
var s = document.getElementById("second"); var r;
var time1 = new Date().getTime();
for (i = 0 ; i < 1000; ++i){
f.innerHTML += "<b>A da</b>";
}
var time2 = new Date().getTime();
var time3 = new Date().getTime();
for (i = 0 ; i < 1000; ++i){
r = document.createElement ("b");
r.innerHTML = "A da";
s.appendChild (r);
}
var time4 = new Date().getTime();
alert ("(innerHTML +=)милисек = " + (time2 - time1) );
alert ("(appendChild)милисек = " + (time4 - time3) );
alert ("коффицент" + ((time2 - time1) / (time4 - time3)) );
</script>
</body>
</html>
|
| Часовой пояс GMT +3, время: 14:25. |