Нужно скопировать элементы списка в текстовое поле - PullRequest
0 голосов
/ 26 августа 2011

Я хочу создать список выбора. Если щелкнуть элемент в списке, то же самое должно отображаться в текстовом поле, а при щелчке другого элемента, который должен быть добавлен в текстовое поле. Я пытаюсь разобраться в приведенном ниже коде, но почему-то он не выполняет свою работу. Любая помощь будет высоко оценена. Заранее спасибо ..

<html>
<head>

<script type="text/javascript">

function register_click(num){
document.getElementById('boxclicked').value += num; 

}

</script>

</head>

<body>
<td><ul>

<li id="2" onclick="register_click(1)">List item 1</li>
<li id="3" onclick="register_click(2)">List item 2</li>
<li id="4"onclick="register_click(3)">List Item 3</li>

</ul></td>

<input type='text' size="150%" width="100%" maxlength="" id="boxclicked">

</body>

</html>

1 Ответ

1 голос
/ 26 августа 2011

Я предполагаю, что вы хотите сделать арифметику, но ваша функция на самом деле выполняет конкатенацию строк.Для арифметики вы должны убедиться, что любое «число» на самом деле является числом, а не строкой:

function register_click(num){
    var box = document.getElementById('boxclicked');
    box.value = box.value || 0
    box.value = parseInt(box.value, 10) + num;
}

box.value будет неопределенным при первом щелчке, поэтому мы должны убедиться, что оно имеет значение,даже если это значение 0. parseInt преобразует строку в число, мы передаем 10, чтобы убедиться, что она делает это в базе 10.


Иногда JavaScript забавен, например:

"1" + 2 + 3 === "123" // true
2 + 3 + "1" === "51" // true 

Он всегда пытается принудить типы, иногда это хорошо, но это может привести к путанице, как описано выше, когда он работает нелогично.Это то, с чем вы столкнулись с вашим оригинальным кодом.Значением элемента была строка, в результате чего num стал строкой и был объединен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...