Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Назначить oncick тегу A (anchor) (https://javascript.ru/forum/events/33002-naznachit-oncick-tegu-anchor.html)

Почемучкин 07.11.2012 03:05

Назначить oncick тегу A (anchor)
 
Пробую в Firefox динамически создать тэг "A" и назначить ему свой onclick, в текстовом виде, но ничего не выходит.

Смотрю onclick перед и после присвоения, - а он почему-то одинаково равен null и до, и после.

В чём дело? Почему нельзя присвоить функцию в тестовом виде, или как это правильно сделать?

Вот код:
var anch = document.createElement('A');
anch.href='#';

alert('До присвоения: anch.onclick == ' + anch.onclick);
anch.onclick = "alert(this); return false; ";
alert('После присвоения\n"alert(this); return false; "\n\n== ' + anch.onclick);
anch.onclick = "alert(this);";
alert('После присвоения\n"alert(this); "\n\n== ' + anch.onclick);
anch.onclick = "javascript:alert(this);";
alert('После присвоения\n"javascript:alert(this);"\n\n== ' + anch.onclick);
anch.onclick = "function (){alert(this); return false; }; ";
alert('После присвоения\n"function (){alert(this); return false; }; "\n\n== ' + anch.onclick);
anch.onclick = "(function (){alert(this); return false; })";
alert('После присвоения\n"(function (){alert(this); return false; })"\n\n== ' + anch.onclick);

// а теперь попробуем назначить нетекстовую функцию
anch.onclick = (function (){alert(this); return false; });
alert('После присвоения\n(function (){alert(this); return false; })\n\n== ' + anch.onclick);

anch.onclick = function (){alert(this); };
alert('После присвоения\nfunction (){alert(this); }\n\n== ' + anch.onclick);

anch.innerHTML = 'click here';
document.body.appendChild(anch);

Почемучкин 07.11.2012 03:17

Сам нашел ответ. Работает это:

anch.setAttribute( "onclick", "alert(this);" );

Skipp 07.11.2012 09:12

мде, ну и извращённое у тебя мышление, зачем тебе это?
<body><script type="text/javascript">
var anch = document.createElement('a');
anch.onclick = new Function("alert('It,s work')");
anch.innerHTML = 'click here';
document.body.appendChild(anch);
</script></body>

Почемучкин 07.11.2012 12:21

Ух ты, спасибо

danik.js 07.11.2012 19:29

Skipp,
Ты тоже со странностями )
anch.onclick = function(e) {
    alert('It,s work');
}

Your 08.11.2012 05:17

Цитата:

Сообщение от Почемучкин (Сообщение 214569)
Сам нашел ответ. Работает это:

anch.setAttribute( "onclick", "alert(this);" );

Ну в некоторых браузерах это не сработает...
Например:

Атрибуты и обработчики событий
В IE текстовое значение, присвоенное атрибуту onclick, не является функцией и не будет работать:
elem.setAttribute('onclick', 'alert(something)') // в IE не работает


http://javascript.ru/tutorial/dom/at...nye-znacheniya

Skipp 08.11.2012 10:01

danik.js,
Почему со странностями, он просил,
Цитата:

Сообщение от Почемучкин
в текстовом виде,

я и ответил.

danik.js 08.11.2012 14:49

Skipp, извиняюсь, недоглядел. Значит ТС у нас со странностями :)

Почемучкин 11.11.2012 20:35

danik.js,
А может ты со странностями ;)

Your,
Спасибо большое, буду знать. Тогда остается решение by Skipp.

danik.js 11.11.2012 22:20

Чтоб не осталось неопределенности, кто со странностями,не мог бы ты объяснить зачем тебе именно "текстовый вид" присваивать?


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