Javascript-форум (https://javascript.ru/forum/)
-   Firefox/Mozilla (https://javascript.ru/forum/css-html-firefox-mizilla/)
-   -   FF. Ошибка при выполнении скрипта. (https://javascript.ru/forum/css-html-firefox-mizilla/18856-ff-oshibka-pri-vypolnenii-skripta.html)

nordek 18.07.2011 13:51

FF. Ошибка при выполнении скрипта.
 
Доброго времени суток. Я только начал перелезать из делфей в Javascript, поэтому не глумитесь сильно над вопросом. У меня в функции есть обработка формы типа textarea с именем S1. При выполнении скрипта-функции первой строкой идет выражение S1.value="", т.е. я хочу каждый раз чичтить форму, вот на эту строчку имеется ошибка "S1 is not defined". Подскажие в чем причина пожалуйста, в Opera проблемы такой нет.

melky 18.07.2011 13:56

попробуй найти зону по имени.. (ф-я возвратит нумерованный список. так что,если эл. один, то придется писать [0] )

<textarea name="S1"></textarea>
<script>
alert(  document.getElementsByName("S1")[0] )
</script>

nordek 18.07.2011 14:58

Выдает сообщение [object]. ???

trikadin 18.07.2011 15:06

Потому что <textarea> - это объект (object).

Чтобы получить значение, делайте так:
<textarea name="S1">ololo</textarea><br>
<button onclick="alert(document.getElementsByName('S1')[0].value)">Посмотреть</button>

nordek 18.07.2011 20:56

Я привык как в делфях, что можно присвоить переменной значение поля формы, например текстовой, через ее имя (w:=form1.edit1.text), так и тут сделал: var w=S1.value, где S1 - имя формы тип TextArea, опера, которой я пользуюсь, ошибок не дала, я и успокоился...
А скажите, на сколько грамотно будет, если я со своим кодом для умаеньшения геммора с корректировкой кода, поступлю так - там где у меня, скажем, w=S1.value; строчкой ранее я напишу так: var S1=document.getElementsByName("S1")[0], т.е. присвою переменной S1 одноименную форму, и дальнейший код можно не менять...

trikadin 18.07.2011 21:36

Будут кроссбраузерные гадости. Фишка в том, что эксплорер (и опера вслед за ним, "в целях лучшей совместимости") имеет привычку создавать из элементов вида tagName#id (с идентификатором, проще говоря) глобальные объекты с именем идентификатора. Причём в эксплорере я натыкался ещё и на то, что он не даёт менять им значение. Выхода два:

1) ставить перед идентификатором двоеточие. Тогда глобальный объект создаваться не будет. Минус: нельзя будет назначать стили по идентификатору.
2) называть сами переменные по-другому.

Отмечу, что все вышеперечисленные проблемы - только в глобальной области видимости. Если делать так в ф-ции (не забывая var при этом) - то всё будет прекрасно.

melky 18.07.2011 21:36

все будет ок :)

кеширование это называется

trikadin 18.07.2011 22:20

<div id="div">text</div>
<script>
div="bla";
alert(div);
</script>


Под ie ошибка.

melky 18.07.2011 22:42

я ответил автору топика, просто ты опередил, trikadin

trikadin 18.07.2011 22:58

А, понятно)


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