| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: для новичков > Существование элемента в массивах |
| Автор: vitalina 17.11.2009, 13:49 |
| Есть, например, три массива: ("а", "и", "т") ("б", "к", "у") ("в", "л", "ф") Не могу сообразить как сделать: пользователь ввёл в поле букву "к", скрипт проверяет в каком массиве эта буква и выводит число 2. В дальнейшем я планирую суммировать эти числа, но думая с этим я сама справлюсь. |
| Автор: Amphiluke 17.11.2009, 14:42 | ||
А нельзя что-ли все массивы последовательно просмотреть?
|
| Автор: vitalina 17.11.2009, 14:48 |
| Как-то всё сложно, а проще нельзя? У меня работает, но почему-то алерт выскакивает 2 раза... Добавлено через 3 минуты и 2 секунды Знаю зачем document.write, а зачем return? А return -1? Добавлено через 5 минут и 30 секунд Почему используется return, а не document.write? |
| Автор: Amphiluke 17.11.2009, 15:01 |
Один из них — точно не мой. return необходим для того, чтобы функция вернула значение. Использовать метод document.write в можно исключительно во время загрузки страницы, а функции можно всегда, например, при возникновении события (кнопку нажали, курсор переместили и проч.). return -1 выполнится в том случае, если пользователь введет буковку, которая вообще не встречается ни в одном массиве. Добавлено через 2 минуты и 17 секунд В вашем случае использовать метод document.write нельзя, т.к. требуется реакция на событие — пользователь ввел букву с клавиатуры. |
| Автор: vitalina 17.11.2009, 15:05 |
| А если буковки, допустим в 2 полях, эти поля надо проверять по очереди? А если 9 полей по 1 букве? Можно ли эту проверку сделать одним махом? Добавлено через 7 минут и 41 секунду Если id формы =t1 писать alert(whereLetterLocated(t1));? У меня так пишет -1. |
| Автор: vitalina 17.11.2009, 15:22 |
| Объясните мне эту строчку: str.indexOf(text1.value) != -1 |
| Автор: Amphiluke 17.11.2009, 15:29 | ||
| Я с помощью метода join превращаю массив в строку из элементов массива. Метод indexOf проверяет, есть ли в строке указанный символ. Если есть, то indexOf возвращает позицию символа, а если нет, то возвращает -1. Это, на мой взгляд, самый простой способ проверить, есть ли буква в массиве... Добавлено через 8 минут и 39 секунд Вот что получилось у меня...
|
| Автор: vitalina 17.11.2009, 15:45 |
| Спасибо, буду разбираться! |
| Автор: vitalina 17.11.2009, 16:25 |
| 6 полей, я буквы ввела в первые 3, а почему алерт говорит, что в трёх последний полях буквы в массивах 1? Добавлено через 10 минут и 35 секунд Я всё-таки не поняла почему -1? Почему алерт ввыводит запятую, когда мы не давали такой команды? |
| Автор: vitalina 17.11.2009, 16:45 |
| А если слова в алерте написать ещё надо? Так: return "ok" resultArr; у меня не работает. Как правильно? |
| Автор: Amphiluke 17.11.2009, 17:09 | ||||||||
Значит, так оно и есть. Все массивы содержат «cимвол» "" (пустой). Но если нужно избежать этого эффекта, то придется предусмотреть этот случай явно.
Определитесь, что конкретно вы хотите видеть на выходе. Если строку, то измените так:
P.S. Я использую alert лишь для примера, вы можете выводить результат на страницу (только не через document.write). А массив возвращается лишь только потому, что вы говорили о необходимости дальнейшей работы с этими числами. |
| Автор: vitalina 17.11.2009, 17:23 |
| Хм... большое спасибо! Раньше я поле1 + поле2, а сейчас что-то не соображу. а тут наверное больше кода будет, если суммировать сразу все числа... Добавлено через 1 минуту и 57 секунд Нету же sum(__form.elements[i].value) |
| Автор: Amphiluke 17.11.2009, 17:33 | ||
Ну дак написать недолго:
Добавлено через 2 минуты и 52 секунды P.S. А массив, который передается в эту функцию уже получен в функции checkAllFields. |
| Автор: vitalina 17.11.2009, 17:59 |
| Как много кода! Какой файл огромный! |
| Автор: Amphiluke 17.11.2009, 18:02 |
| Выведите весь Javascript в отдельный файл. Всё не так страшно будет. =) |
| Автор: vitalina 17.11.2009, 18:19 | ||
| Я хочу, чтобы это было в форме. Добавлено через 1 минуту и 24 секунды Сделала форму и дописала функцию:
Не работает Добавлено через 2 минуты и 40 секунд А без res.value=sum; всё работает. |
| Автор: bars80080 17.11.2009, 18:27 |
| ещё бы. а что такое res? |
| Автор: vitalina 17.11.2009, 18:38 |
| id поля куда должен выводиться sum. Добавлено через 2 минуты и 29 секунд Я вывела результат в див. Получилось! Сделала и заполнила 16 полей нажала на кнопку и "Сценарий, исполняемый на этой странице, возможно занят или не отвечает. Вы можете остановить его сейчас или продолжить и посмотреть сможет ли он завершить свою работу. Сценарий: file:///C:/Documents%20and%20Settings/%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D0%B8%D1%8F/Desktop/existarr.htm:50" Добавлено через 6 минут и 30 секунд 14 полей только обрабатывает. |
| Автор: Amphiluke 17.11.2009, 18:57 | ||
vitalina, попробуйте переписать функцию
Возможно, это из-за -1 |
| Автор: vitalina 17.11.2009, 19:02 |
| Получилось! Добавлено через 4 минуты А как всё-таки сделать чтобы в поле выводилось? |
| Автор: vitalina 17.11.2009, 19:19 | ||||
У меня почему-то не получается делать это с двумя разными классами.
и
Дописала цифру 2. Там где поменяла - не работает! |
| Автор: vitalina 17.11.2009, 20:07 | ||
Так как же сделать? |
| Автор: Amphiluke 17.11.2009, 20:30 | ||||||
На то и расчет, чтобы перебирать не все элементы формы (среди них есть и кнопки, и прочий «хлам»), а только поля, куда пользователь заносит буквы. Чтобы отличать эти поля от других элементов, им присвоили класс class="inputField". Но если вам необходимо использовать несколько классов, то при переборе проверяйте атрибут className так:
Для сокращения кода, можете потльзоваться ключевым словом with. Назначить полю, в которое будете выводить, идентификатор id (например, id="resultField"), а потом присваивайте нужное значение атрибуту value этого поля:
|
| Автор: vitalina 17.11.2009, 21:33 | ||
| Понятно! Добавлено через 3 минуты и 44 секунды
Поподробнее можно? |
| Автор: vitalina 17.11.2009, 22:18 | ||
У меня работает только первое условие, а второе, какое бы оно ни было не работает! |
| Автор: bars80080 17.11.2009, 23:15 | ||
мдя. а вы можете просто вглядеться в код и попытаться подумать. Amphiluke писал идею, он не проверял то что вам отдавал, не его прерогатива. ну ошибся, бывает. потестил бы - переписал. можете, сами? он ведь не волшебной палочкой машет
|
| Автор: vitalina 18.11.2009, 01:34 |
| Со всем справилась. |