Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   не работает onclick в IE... (https://javascript.ru/forum/events/23329-ne-rabotaet-onclick-v-ie.html)

ZumbiAzul 20.11.2011 15:45

не работает onclick в IE...
 
Здравствуйте!

Создал два файла: index.html и funcs.js.

index.html:
Код:

<!DOCTYPE html>
<HTML lang=ru>
  <HEAD>
        <SCRIPT type="text/javascript" src="funcs.js"></SCRIPT>
  </HEAD>
  <BODY>
        <DIV class="avatar_large" id="avatar_large"></DIV>
        <IMG src="pic.jpg" id="avatar_pic">
  </BODY>
</HTML>

funcs.js:
Код:

window.onload = function() {

        avatar = document.getElementById('avatar_pic');
        avatar_large = document.getElementById('avatar_large');
       
        avatar.onclick = function() {
                avatar_large.className = 'avatar_large_visible';
                avatar_large.innerHTML = '<IMG src=pic.jpg width=500 height=400>';               
                {
}

где avatar_large_visible - какой-нибудь стилевой класс.
Почему в IE это не работает, а в остальных браузерах работает? Я понимаю, что DOM у разных браузеров отличается... Но по-моему, в этом коде ничего сверхестественного не должно быть для IE...

ksa 20.11.2011 15:52

Цитата:

Сообщение от ZumbiAzul
Я понимаю, что DOM у разных браузеров отличается...

Чем? :blink:

Цитата:

Сообщение от ZumbiAzul
Почему в IE это не работает

А если так? :)

window.onload = function() {
	avatar = document.getElementById('avatar_pic');
	avatar.onclick = function() {
		avatar_large = document.getElementById('avatar_large');
		avatar_large.className = 'avatar_large_visible';
		avatar_large.innerHTML = '<IMG src=pic.jpg width=500 height=400>';		
	{
}

ZumbiAzul 20.11.2011 16:19

Цитата:

Сообщение от ksa (Сообщение 137818)
Чем? :blink:

Нюансами:) Какими? Не знаю... Погуглите:)

Цитата:

Сообщение от ksa (Сообщение 137818)
А если так? :)

window.onload = function() {
	avatar = document.getElementById('avatar_pic');
	avatar.onclick = function() {
		avatar_large = document.getElementById('avatar_large');
		avatar_large.className = 'avatar_large_visible';
		avatar_large.innerHTML = '<IMG src=pic.jpg width=500 height=400>';		
	{
}

Так тоже не работает... Но я уже разобрался. IE более строг к синтаксису и без var не понимает, что объявляется переменная-объект)

trikadin 20.11.2011 16:29

Цитата:

Сообщение от ZumbiAzul
Я понимаю, что DOM у разных браузеров отличается...

DOM - Document Object Model, объектная модель документа, в разных браузерах не отличается. Вот методы работы с ней - да.

Цитата:

Сообщение от ZumbiAzul
IE более строг к синтаксису и без var не понимает, что объявляется переменная-объект)

Рискну предположить, что дело не в "строгости" IE, а в том, что у вас на странице есть элемент с id="avatar".

ZumbiAzul 20.11.2011 16:45

Цитата:

Сообщение от trikadin (Сообщение 137840)
Рискну предположить, что дело не в "строгости" IE, а в том, что у вас на странице есть элемент с id="avatar".

Ну и что? Факт - без var не работало, c var заработало (даже несмотря на то, что есть элемент с id="avatar").

trikadin 20.11.2011 16:52

Цитата:

Сообщение от ZumbiAzul
Ну и что? Факт - без var не работало, c var заработало (даже несмотря на то, что есть элемент с id="avatar").

А кто сказал, что это плохой вариант исправления? Просто лучше понимать, откуда берутся ошибки. Например, здесь дело было в том, что ie имеет привычку создавать read-only глобальные переменные по идентификаторам. Поэтому, когда вы пытались записать в avatar другое значение, ie передавал ошибку. А когда вы поставили var, была создана локальная переменная, которая никоим образом не мешала глобальной.

ZumbiAzul 20.11.2011 17:11

Цитата:

Сообщение от trikadin (Сообщение 137848)
у вас на странице есть элемент с id="avatar"

В конечном итоге (сразу не посмотрел) на странице нет элемента с id="avatar"...

Цитата:

Сообщение от trikadin (Сообщение 137848)
ie имеет привычку создавать read-only глобальные переменные по идентификаторам. Поэтому, когда вы пытались записать в avatar другое значение, ie передавал ошибку. А когда вы поставили var, была создана локальная переменная, которая никоим образом не мешала глобальной.

Наверное, вы имеете ввиду все-таки avatar_large... Странно, что при всем том, что вы тут пишете, ваш вариант ведь не работает... Если вы знали, что IE без var создает read-only переменные, тогда почему сами не поставили var? Короче, я лишь хочу, чтобы вы поняли, что все мы в конечном итоге люди и нам свойственно ошибаться... И мне и вам... И если вы где-то ошиблись, то я точно о вас худшего мнения не стал.

trikadin 20.11.2011 17:26

Цитата:

Сообщение от ZumbiAzul
В конечном итоге (сразу не посмотрел) на странице нет элемента с id="avatar"...

Я лишь предположил.

Цитата:

Сообщение от ZumbiAzul
Странно, что при всем том, что вы тут пишете, ваш вариант ведь не работает...

Ээ... Простите, какой вариант? Можно я тоже о нём узнаю?)

Цитата:

Сообщение от ZumbiAzul
Если вы знали, что IE без var создает read-only переменные, тогда почему сами не поставили var?

Куда поставил? Когда я пишу код, я ставлю var))

Цитата:

Сообщение от ZumbiAzul
И если вы где-то ошиблись, то я точно о вас худшего мнения не стал.

Это успокаивает) :D

ZumbiAzul 20.11.2011 17:34

Извините :)

ksa 20.11.2011 18:13

Цитата:

Сообщение от ZumbiAzul
Нюансами Какими? Не знаю..

No comment...


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